// This file is auto generated from code run on the actual hardware
#include <cstdint>

#include <string>
#include <vector>
struct TestEntry { int32_t firstOp; int32_t secondOp; int32_t result; int32_t resultSaturated; std::string flags; };
// TODO flags are wrong for mul ALU, since they are set by add ALU instead!
static const std::vector<TestEntry> TEST_OP_ASR = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, -1, -1, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, -1, -1, "n"},
    TestEntry{-2147483648, 1, -1073741824, -1073741824, "n"},
    TestEntry{-2147483648, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32767, -1, -1, "n"},
    TestEntry{-2147483648, 32768, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 127, -1, -1, "n"},
    TestEntry{-2147483648, 128, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 2147483647, 0, 0, "cz"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, 0, 0, "cz"},
    TestEntry{2147483647, 1, 1073741823, 1073741823, "c"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 32767, 0, 0, "cz"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 127, 0, 0, "cz"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1082130432, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -268435456, 2147483647, 2147483647, ""},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "z"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, 0, 0, "z"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, 0, 0, "z"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, 0, 0, "z"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, -1, -1, "nc"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -1, -1, "nc"},
    TestEntry{-1, 1, -1, -1, "nc"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, -1, -1, "nc"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -1, -1, "nc"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, 1, 1, ""},
    TestEntry{1, 2147483647, 0, 0, "z"},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, 0, 0, "z"},
    TestEntry{1, 1, 0, 0, "cz"},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, 1, 1, ""},
    TestEntry{1, 32767, 0, 0, "z"},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, 0, 0, "z"},
    TestEntry{1, 128, 1, 1, ""},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, 1, 1, ""},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, 1, 1, ""},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 2147483647, 0, 0, "cz"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, 0, 0, "cz"},
    TestEntry{1879048192, 1, 939524096, 939524096, ""},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 32767, 0, 0, "cz"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 127, 0, 0, "cz"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, -1, -1, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1, -1, "n"},
    TestEntry{-1879048192, 1, -939524096, -939524096, "n"},
    TestEntry{-1879048192, 1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, -1, -1, "n"},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, -1, -1, "n"},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1073741824, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "n"},
    TestEntry{32767, -2147483648, 32767, 32767, ""},
    TestEntry{32767, 2147483647, 0, 0, "z"},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, 0, 0, "z"},
    TestEntry{32767, 1, 16383, 16383, "c"},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, 32767, 32767, ""},
    TestEntry{32767, 32767, 0, 0, "z"},
    TestEntry{32767, 32768, 32767, 32767, ""},
    TestEntry{32767, 127, 0, 0, "z"},
    TestEntry{32767, 128, 32767, 32767, ""},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, 32767, 32767, ""},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, 32767, 32767, ""},
    TestEntry{32768, -2147483648, 32768, 32768, ""},
    TestEntry{32768, 2147483647, 0, 0, "z"},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, 0, 0, "z"},
    TestEntry{32768, 1, 16384, 16384, ""},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, 32768, 32768, ""},
    TestEntry{32768, 32767, 0, 0, "z"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 0, 0, "z"},
    TestEntry{32768, 128, 32768, 32768, ""},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, 32768, 32768, ""},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, 32768, 32768, ""},
    TestEntry{127, -2147483648, 127, 127, ""},
    TestEntry{127, 2147483647, 0, 0, "z"},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, 0, 0, "z"},
    TestEntry{127, 1, 63, 63, "c"},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, 127, 127, ""},
    TestEntry{127, 32767, 0, 0, "z"},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, 0, 0, "z"},
    TestEntry{127, 128, 127, 127, ""},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, 127, 127, ""},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, 127, 127, ""},
    TestEntry{128, -2147483648, 128, 128, ""},
    TestEntry{128, 2147483647, 0, 0, "z"},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, 0, 0, "z"},
    TestEntry{128, 1, 64, 64, ""},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, 128, 128, ""},
    TestEntry{128, 32767, 0, 0, "z"},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 0, 0, "z"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, 128, 128, ""},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, 128, 128, ""},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 2147483647, 0, 0, "z"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, 0, 0, "z"},
    TestEntry{1065353216, 1, 532676608, 532676608, ""},
    TestEntry{1065353216, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 32767, 0, 0, "z"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 127, 0, 0, "z"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -268435456, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, -1, -1, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1, -1, "n"},
    TestEntry{-1082130432, 1, -541065216, -541065216, "n"},
    TestEntry{-1082130432, 1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, -1, -1, "n"},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, -1, -1, "n"},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -268435456, -1082130432, -1082130432, "n"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 2147483647, 0, 0, "cz"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, 0, 0, "cz"},
    TestEntry{1073741824, 1, 536870912, 536870912, ""},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 32767, 0, 0, "cz"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 127, 0, 0, "cz"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, -1, -1, "nc"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -1, -1, "nc"},
    TestEntry{-268435456, 1, -134217728, -134217728, "n"},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, -1, -1, "nc"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, -1, -1, "nc"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_AND = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, 0, 0, "z"},
    TestEntry{-2147483648, 0, 0, 0, "z"},
    TestEntry{-2147483648, -1, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1, 0, 0, "z"},
    TestEntry{-2147483648, 1879048192, 0, 0, "z"},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32767, 0, 0, "z"},
    TestEntry{-2147483648, 32768, 0, 0, "z"},
    TestEntry{-2147483648, 127, 0, 0, "z"},
    TestEntry{-2147483648, 128, 0, 0, "z"},
    TestEntry{-2147483648, 1065353216, 0, 0, "z"},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1073741824, 0, 0, "z"},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, -2147483648, 0, 0, "z"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 0, 0, "z"},
    TestEntry{2147483647, -1, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1, 1, 1, ""},
    TestEntry{2147483647, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{2147483647, -1879048192, 268435456, 268435456, ""},
    TestEntry{2147483647, 32767, 32767, 32767, ""},
    TestEntry{2147483647, 32768, 32768, 32768, ""},
    TestEntry{2147483647, 127, 127, 127, ""},
    TestEntry{2147483647, 128, 128, 128, ""},
    TestEntry{2147483647, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{2147483647, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{2147483647, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{2147483647, -268435456, 1879048192, 1879048192, ""},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "z"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, 0, 0, "z"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, 0, 0, "z"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, 0, 0, "z"},
    TestEntry{-1, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1, 0, 0, 0, "z"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, 1, 1, ""},
    TestEntry{-1, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1, 32767, 32767, 32767, ""},
    TestEntry{-1, 32768, 32768, 32768, ""},
    TestEntry{-1, 127, 127, 127, ""},
    TestEntry{-1, 128, 128, 128, ""},
    TestEntry{-1, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1, -268435456, -268435456, -268435456, "n"},
    TestEntry{1, -2147483648, 0, 0, "z"},
    TestEntry{1, 2147483647, 1, 1, ""},
    TestEntry{1, 0, 0, 0, "z"},
    TestEntry{1, -1, 1, 1, ""},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 0, 0, "z"},
    TestEntry{1, -1879048192, 0, 0, "z"},
    TestEntry{1, 32767, 1, 1, ""},
    TestEntry{1, 32768, 0, 0, "z"},
    TestEntry{1, 127, 1, 1, ""},
    TestEntry{1, 128, 0, 0, "z"},
    TestEntry{1, 1065353216, 0, 0, "z"},
    TestEntry{1, -1082130432, 0, 0, "z"},
    TestEntry{1, 1073741824, 0, 0, "z"},
    TestEntry{1, -268435456, 0, 0, "z"},
    TestEntry{1879048192, -2147483648, 0, 0, "z"},
    TestEntry{1879048192, 2147483647, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 0, 0, 0, "z"},
    TestEntry{1879048192, -1, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1, 0, 0, "z"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 268435456, 268435456, ""},
    TestEntry{1879048192, 32767, 0, 0, "z"},
    TestEntry{1879048192, 32768, 0, 0, "z"},
    TestEntry{1879048192, 127, 0, 0, "z"},
    TestEntry{1879048192, 128, 0, 0, "z"},
    TestEntry{1879048192, 1065353216, 805306368, 805306368, ""},
    TestEntry{1879048192, -1082130432, 805306368, 805306368, ""},
    TestEntry{1879048192, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1879048192, 2147483647, 268435456, 268435456, ""},
    TestEntry{-1879048192, 0, 0, 0, "z"},
    TestEntry{-1879048192, -1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1, 0, 0, "z"},
    TestEntry{-1879048192, 1879048192, 268435456, 268435456, ""},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, 0, 0, "z"},
    TestEntry{-1879048192, 32768, 0, 0, "z"},
    TestEntry{-1879048192, 127, 0, 0, "z"},
    TestEntry{-1879048192, 128, 0, 0, "z"},
    TestEntry{-1879048192, 1065353216, 268435456, 268435456, ""},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1073741824, 0, 0, "z"},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "n"},
    TestEntry{32767, -2147483648, 0, 0, "z"},
    TestEntry{32767, 2147483647, 32767, 32767, ""},
    TestEntry{32767, 0, 0, 0, "z"},
    TestEntry{32767, -1, 32767, 32767, ""},
    TestEntry{32767, 1, 1, 1, ""},
    TestEntry{32767, 1879048192, 0, 0, "z"},
    TestEntry{32767, -1879048192, 0, 0, "z"},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 0, 0, "z"},
    TestEntry{32767, 127, 127, 127, ""},
    TestEntry{32767, 128, 128, 128, ""},
    TestEntry{32767, 1065353216, 0, 0, "z"},
    TestEntry{32767, -1082130432, 0, 0, "z"},
    TestEntry{32767, 1073741824, 0, 0, "z"},
    TestEntry{32767, -268435456, 0, 0, "z"},
    TestEntry{32768, -2147483648, 0, 0, "z"},
    TestEntry{32768, 2147483647, 32768, 32768, ""},
    TestEntry{32768, 0, 0, 0, "z"},
    TestEntry{32768, -1, 32768, 32768, ""},
    TestEntry{32768, 1, 0, 0, "z"},
    TestEntry{32768, 1879048192, 0, 0, "z"},
    TestEntry{32768, -1879048192, 0, 0, "z"},
    TestEntry{32768, 32767, 0, 0, "z"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 0, 0, "z"},
    TestEntry{32768, 128, 0, 0, "z"},
    TestEntry{32768, 1065353216, 0, 0, "z"},
    TestEntry{32768, -1082130432, 0, 0, "z"},
    TestEntry{32768, 1073741824, 0, 0, "z"},
    TestEntry{32768, -268435456, 0, 0, "z"},
    TestEntry{127, -2147483648, 0, 0, "z"},
    TestEntry{127, 2147483647, 127, 127, ""},
    TestEntry{127, 0, 0, 0, "z"},
    TestEntry{127, -1, 127, 127, ""},
    TestEntry{127, 1, 1, 1, ""},
    TestEntry{127, 1879048192, 0, 0, "z"},
    TestEntry{127, -1879048192, 0, 0, "z"},
    TestEntry{127, 32767, 127, 127, ""},
    TestEntry{127, 32768, 0, 0, "z"},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 0, 0, "z"},
    TestEntry{127, 1065353216, 0, 0, "z"},
    TestEntry{127, -1082130432, 0, 0, "z"},
    TestEntry{127, 1073741824, 0, 0, "z"},
    TestEntry{127, -268435456, 0, 0, "z"},
    TestEntry{128, -2147483648, 0, 0, "z"},
    TestEntry{128, 2147483647, 128, 128, ""},
    TestEntry{128, 0, 0, 0, "z"},
    TestEntry{128, -1, 128, 128, ""},
    TestEntry{128, 1, 0, 0, "z"},
    TestEntry{128, 1879048192, 0, 0, "z"},
    TestEntry{128, -1879048192, 0, 0, "z"},
    TestEntry{128, 32767, 128, 128, ""},
    TestEntry{128, 32768, 0, 0, "z"},
    TestEntry{128, 127, 0, 0, "z"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 0, 0, "z"},
    TestEntry{128, -1082130432, 0, 0, "z"},
    TestEntry{128, 1073741824, 0, 0, "z"},
    TestEntry{128, -268435456, 0, 0, "z"},
    TestEntry{1065353216, -2147483648, 0, 0, "z"},
    TestEntry{1065353216, 2147483647, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 0, 0, 0, "z"},
    TestEntry{1065353216, -1, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1, 0, 0, "z"},
    TestEntry{1065353216, 1879048192, 805306368, 805306368, ""},
    TestEntry{1065353216, -1879048192, 268435456, 268435456, ""},
    TestEntry{1065353216, 32767, 0, 0, "z"},
    TestEntry{1065353216, 32768, 0, 0, "z"},
    TestEntry{1065353216, 127, 0, 0, "z"},
    TestEntry{1065353216, 128, 0, 0, "z"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1073741824, 0, 0, "z"},
    TestEntry{1065353216, -268435456, 805306368, 805306368, ""},
    TestEntry{-1082130432, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1082130432, 2147483647, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 0, 0, 0, "z"},
    TestEntry{-1082130432, -1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1, 0, 0, "z"},
    TestEntry{-1082130432, 1879048192, 805306368, 805306368, ""},
    TestEntry{-1082130432, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1082130432, 32767, 0, 0, "z"},
    TestEntry{-1082130432, 32768, 0, 0, "z"},
    TestEntry{-1082130432, 127, 0, 0, "z"},
    TestEntry{-1082130432, 128, 0, 0, "z"},
    TestEntry{-1082130432, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, 0, 0, "z"},
    TestEntry{-1082130432, -268435456, -1342177280, -1342177280, "n"},
    TestEntry{1073741824, -2147483648, 0, 0, "z"},
    TestEntry{1073741824, 2147483647, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 0, 0, 0, "z"},
    TestEntry{1073741824, -1, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1, 0, 0, "z"},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, 0, 0, "z"},
    TestEntry{1073741824, 32767, 0, 0, "z"},
    TestEntry{1073741824, 32768, 0, 0, "z"},
    TestEntry{1073741824, 127, 0, 0, "z"},
    TestEntry{1073741824, 128, 0, 0, "z"},
    TestEntry{1073741824, 1065353216, 0, 0, "z"},
    TestEntry{1073741824, -1082130432, 0, 0, "z"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-268435456, 2147483647, 1879048192, 1879048192, ""},
    TestEntry{-268435456, 0, 0, 0, "z"},
    TestEntry{-268435456, -1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1, 0, 0, "z"},
    TestEntry{-268435456, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-268435456, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-268435456, 32767, 0, 0, "z"},
    TestEntry{-268435456, 32768, 0, 0, "z"},
    TestEntry{-268435456, 127, 0, 0, "z"},
    TestEntry{-268435456, 128, 0, 0, "z"},
    TestEntry{-268435456, 1065353216, 805306368, 805306368, ""},
    TestEntry{-268435456, -1082130432, -1342177280, -1342177280, "n"},
    TestEntry{-268435456, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_NOT = {
    TestEntry{-2147483648, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{0, -2147483648, -1, -1, "n"},
    TestEntry{-1, -2147483648, 0, 0, "z"},
    TestEntry{1, -2147483648, -2, -2, "n"},
    TestEntry{1879048192, -2147483648, -1879048193, -1879048193, "n"},
    TestEntry{-1879048192, -2147483648, 1879048191, 1879048191, ""},
    TestEntry{32767, -2147483648, -32768, -32768, "n"},
    TestEntry{32768, -2147483648, -32769, -32769, "n"},
    TestEntry{127, -2147483648, -128, -128, "n"},
    TestEntry{128, -2147483648, -129, -129, "n"},
    TestEntry{1065353216, -2147483648, -1065353217, -1065353217, "n"},
    TestEntry{-1082130432, -2147483648, 1082130431, 1082130431, ""},
    TestEntry{1073741824, -2147483648, -1073741825, -1073741825, "n"},
    TestEntry{-268435456, -2147483648, 268435455, 268435455, ""},
};

static const std::vector<TestEntry> TEST_OP_OR = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, -1, -1, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, -1, -1, "n"},
    TestEntry{-2147483648, 1, -2147483647, -2147483647, "n"},
    TestEntry{-2147483648, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-2147483648, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-2147483648, 32767, -2147450881, -2147450881, "n"},
    TestEntry{-2147483648, 32768, -2147450880, -2147450880, "n"},
    TestEntry{-2147483648, 127, -2147483521, -2147483521, "n"},
    TestEntry{-2147483648, 128, -2147483520, -2147483520, "n"},
    TestEntry{-2147483648, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{-2147483648, -268435456, -268435456, -268435456, "n"},
    TestEntry{2147483647, -2147483648, -1, -1, "n"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, -1, -1, "n"},
    TestEntry{2147483647, 1, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1879048192, -1, -1, "n"},
    TestEntry{2147483647, 32767, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 127, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 128, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1082130432, -1, -1, "n"},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -268435456, -1, -1, "n"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, -1, -1, "n"},
    TestEntry{0, 1, 1, 1, ""},
    TestEntry{0, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{0, 32767, 32767, 32767, ""},
    TestEntry{0, 32768, 32768, 32768, ""},
    TestEntry{0, 127, 127, 127, ""},
    TestEntry{0, 128, 128, 128, ""},
    TestEntry{0, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{0, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, -1, -1, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, -1, -1, "n"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, -1, -1, "n"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -1, -1, "n"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, -2147483647, -2147483647, "n"},
    TestEntry{1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, -1, -1, "n"},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 1879048193, 1879048193, ""},
    TestEntry{1, -1879048192, -1879048191, -1879048191, "n"},
    TestEntry{1, 32767, 32767, 32767, ""},
    TestEntry{1, 32768, 32769, 32769, ""},
    TestEntry{1, 127, 127, 127, ""},
    TestEntry{1, 128, 129, 129, ""},
    TestEntry{1, 1065353216, 1065353217, 1065353217, ""},
    TestEntry{1, -1082130432, -1082130431, -1082130431, "n"},
    TestEntry{1, 1073741824, 1073741825, 1073741825, ""},
    TestEntry{1, -268435456, -268435455, -268435455, "n"},
    TestEntry{1879048192, -2147483648, -268435456, -268435456, "n"},
    TestEntry{1879048192, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, -1, -1, "n"},
    TestEntry{1879048192, 1, 1879048193, 1879048193, ""},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, -268435456, -268435456, "n"},
    TestEntry{1879048192, 32767, 1879080959, 1879080959, ""},
    TestEntry{1879048192, 32768, 1879080960, 1879080960, ""},
    TestEntry{1879048192, 127, 1879048319, 1879048319, ""},
    TestEntry{1879048192, 128, 1879048320, 1879048320, ""},
    TestEntry{1879048192, 1065353216, 2139095040, 2139095040, ""},
    TestEntry{1879048192, -1082130432, -8388608, -8388608, "n"},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, -1, -1, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1, -1, "n"},
    TestEntry{-1879048192, 1, -1879048191, -1879048191, "n"},
    TestEntry{-1879048192, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, -1879015425, -1879015425, "n"},
    TestEntry{-1879048192, 32768, -1879015424, -1879015424, "n"},
    TestEntry{-1879048192, 127, -1879048065, -1879048065, "n"},
    TestEntry{-1879048192, 128, -1879048064, -1879048064, "n"},
    TestEntry{-1879048192, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1879048192, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1879048192, 1073741824, -805306368, -805306368, "n"},
    TestEntry{-1879048192, -268435456, -268435456, -268435456, "n"},
    TestEntry{32767, -2147483648, -2147450881, -2147450881, "n"},
    TestEntry{32767, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, -1, -1, "n"},
    TestEntry{32767, 1, 32767, 32767, ""},
    TestEntry{32767, 1879048192, 1879080959, 1879080959, ""},
    TestEntry{32767, -1879048192, -1879015425, -1879015425, "n"},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 65535, 65535, ""},
    TestEntry{32767, 127, 32767, 32767, ""},
    TestEntry{32767, 128, 32767, 32767, ""},
    TestEntry{32767, 1065353216, 1065385983, 1065385983, ""},
    TestEntry{32767, -1082130432, -1082097665, -1082097665, "n"},
    TestEntry{32767, 1073741824, 1073774591, 1073774591, ""},
    TestEntry{32767, -268435456, -268402689, -268402689, "n"},
    TestEntry{32768, -2147483648, -2147450880, -2147450880, "n"},
    TestEntry{32768, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, -1, -1, "n"},
    TestEntry{32768, 1, 32769, 32769, ""},
    TestEntry{32768, 1879048192, 1879080960, 1879080960, ""},
    TestEntry{32768, -1879048192, -1879015424, -1879015424, "n"},
    TestEntry{32768, 32767, 65535, 65535, ""},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 32895, 32895, ""},
    TestEntry{32768, 128, 32896, 32896, ""},
    TestEntry{32768, 1065353216, 1065385984, 1065385984, ""},
    TestEntry{32768, -1082130432, -1082097664, -1082097664, "n"},
    TestEntry{32768, 1073741824, 1073774592, 1073774592, ""},
    TestEntry{32768, -268435456, -268402688, -268402688, "n"},
    TestEntry{127, -2147483648, -2147483521, -2147483521, "n"},
    TestEntry{127, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, -1, -1, "n"},
    TestEntry{127, 1, 127, 127, ""},
    TestEntry{127, 1879048192, 1879048319, 1879048319, ""},
    TestEntry{127, -1879048192, -1879048065, -1879048065, "n"},
    TestEntry{127, 32767, 32767, 32767, ""},
    TestEntry{127, 32768, 32895, 32895, ""},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 255, 255, ""},
    TestEntry{127, 1065353216, 1065353343, 1065353343, ""},
    TestEntry{127, -1082130432, -1082130305, -1082130305, "n"},
    TestEntry{127, 1073741824, 1073741951, 1073741951, ""},
    TestEntry{127, -268435456, -268435329, -268435329, "n"},
    TestEntry{128, -2147483648, -2147483520, -2147483520, "n"},
    TestEntry{128, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, -1, -1, "n"},
    TestEntry{128, 1, 129, 129, ""},
    TestEntry{128, 1879048192, 1879048320, 1879048320, ""},
    TestEntry{128, -1879048192, -1879048064, -1879048064, "n"},
    TestEntry{128, 32767, 32767, 32767, ""},
    TestEntry{128, 32768, 32896, 32896, ""},
    TestEntry{128, 127, 255, 255, ""},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 1065353344, 1065353344, ""},
    TestEntry{128, -1082130432, -1082130304, -1082130304, "n"},
    TestEntry{128, 1073741824, 1073741952, 1073741952, ""},
    TestEntry{128, -268435456, -268435328, -268435328, "n"},
    TestEntry{1065353216, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, -1, -1, "n"},
    TestEntry{1065353216, 1, 1065353217, 1065353217, ""},
    TestEntry{1065353216, 1879048192, 2139095040, 2139095040, ""},
    TestEntry{1065353216, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 32767, 1065385983, 1065385983, ""},
    TestEntry{1065353216, 32768, 1065385984, 1065385984, ""},
    TestEntry{1065353216, 127, 1065353343, 1065353343, ""},
    TestEntry{1065353216, 128, 1065353344, 1065353344, ""},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 1073741824, 2139095040, 2139095040, ""},
    TestEntry{1065353216, -268435456, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, -1, -1, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1, -1, "n"},
    TestEntry{-1082130432, 1, -1082130431, -1082130431, "n"},
    TestEntry{-1082130432, 1879048192, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, -1082097665, -1082097665, "n"},
    TestEntry{-1082130432, 32768, -1082097664, -1082097664, "n"},
    TestEntry{-1082130432, 127, -1082130305, -1082130305, "n"},
    TestEntry{-1082130432, 128, -1082130304, -1082130304, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -268435456, -8388608, -8388608, "n"},
    TestEntry{1073741824, -2147483648, -1073741824, -1073741824, "n"},
    TestEntry{1073741824, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, -1, -1, "n"},
    TestEntry{1073741824, 1, 1073741825, 1073741825, ""},
    TestEntry{1073741824, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1073741824, -1879048192, -805306368, -805306368, "n"},
    TestEntry{1073741824, 32767, 1073774591, 1073774591, ""},
    TestEntry{1073741824, 32768, 1073774592, 1073774592, ""},
    TestEntry{1073741824, 127, 1073741951, 1073741951, ""},
    TestEntry{1073741824, 128, 1073741952, 1073741952, ""},
    TestEntry{1073741824, 1065353216, 2139095040, 2139095040, ""},
    TestEntry{1073741824, -1082130432, -8388608, -8388608, "n"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, -268435456, -268435456, "n"},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, -1, -1, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -1, -1, "n"},
    TestEntry{-268435456, 1, -268435455, -268435455, "n"},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, -268402689, -268402689, "n"},
    TestEntry{-268435456, 32768, -268402688, -268402688, "n"},
    TestEntry{-268435456, 127, -268435329, -268435329, "n"},
    TestEntry{-268435456, 128, -268435328, -268435328, "n"},
    TestEntry{-268435456, 1065353216, -8388608, -8388608, "n"},
    TestEntry{-268435456, -1082130432, -8388608, -8388608, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_XOR = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{-2147483648, 2147483647, -1, -1, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, 2147483647, 2147483647, ""},
    TestEntry{-2147483648, 1, -2147483647, -2147483647, "n"},
    TestEntry{-2147483648, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-2147483648, -1879048192, 268435456, 268435456, ""},
    TestEntry{-2147483648, 32767, -2147450881, -2147450881, "n"},
    TestEntry{-2147483648, 32768, -2147450880, -2147450880, "n"},
    TestEntry{-2147483648, 127, -2147483521, -2147483521, "n"},
    TestEntry{-2147483648, 128, -2147483520, -2147483520, "n"},
    TestEntry{-2147483648, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{-2147483648, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{-2147483648, -268435456, 1879048192, 1879048192, ""},
    TestEntry{2147483647, -2147483648, -1, -1, "n"},
    TestEntry{2147483647, 2147483647, 0, 0, "z"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, 1, 2147483646, 2147483646, ""},
    TestEntry{2147483647, 1879048192, 268435455, 268435455, ""},
    TestEntry{2147483647, -1879048192, -268435457, -268435457, "n"},
    TestEntry{2147483647, 32767, 2147450880, 2147450880, ""},
    TestEntry{2147483647, 32768, 2147450879, 2147450879, ""},
    TestEntry{2147483647, 127, 2147483520, 2147483520, ""},
    TestEntry{2147483647, 128, 2147483519, 2147483519, ""},
    TestEntry{2147483647, 1065353216, 1082130431, 1082130431, ""},
    TestEntry{2147483647, -1082130432, -1065353217, -1065353217, "n"},
    TestEntry{2147483647, 1073741824, 1073741823, 1073741823, ""},
    TestEntry{2147483647, -268435456, -1879048193, -1879048193, "n"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, -1, -1, "n"},
    TestEntry{0, 1, 1, 1, ""},
    TestEntry{0, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{0, 32767, 32767, 32767, ""},
    TestEntry{0, 32768, 32768, 32768, ""},
    TestEntry{0, 127, 127, 127, ""},
    TestEntry{0, 128, 128, 128, ""},
    TestEntry{0, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{0, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{-1, 2147483647, -2147483648, -2147483648, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, 0, 0, "z"},
    TestEntry{-1, 1, -2, -2, "n"},
    TestEntry{-1, 1879048192, -1879048193, -1879048193, "n"},
    TestEntry{-1, -1879048192, 1879048191, 1879048191, ""},
    TestEntry{-1, 32767, -32768, -32768, "n"},
    TestEntry{-1, 32768, -32769, -32769, "n"},
    TestEntry{-1, 127, -128, -128, "n"},
    TestEntry{-1, 128, -129, -129, "n"},
    TestEntry{-1, 1065353216, -1065353217, -1065353217, "n"},
    TestEntry{-1, -1082130432, 1082130431, 1082130431, ""},
    TestEntry{-1, 1073741824, -1073741825, -1073741825, "n"},
    TestEntry{-1, -268435456, 268435455, 268435455, ""},
    TestEntry{1, -2147483648, -2147483647, -2147483647, "n"},
    TestEntry{1, 2147483647, 2147483646, 2147483646, ""},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, -2, -2, "n"},
    TestEntry{1, 1, 0, 0, "z"},
    TestEntry{1, 1879048192, 1879048193, 1879048193, ""},
    TestEntry{1, -1879048192, -1879048191, -1879048191, "n"},
    TestEntry{1, 32767, 32766, 32766, ""},
    TestEntry{1, 32768, 32769, 32769, ""},
    TestEntry{1, 127, 126, 126, ""},
    TestEntry{1, 128, 129, 129, ""},
    TestEntry{1, 1065353216, 1065353217, 1065353217, ""},
    TestEntry{1, -1082130432, -1082130431, -1082130431, "n"},
    TestEntry{1, 1073741824, 1073741825, 1073741825, ""},
    TestEntry{1, -268435456, -268435455, -268435455, "n"},
    TestEntry{1879048192, -2147483648, -268435456, -268435456, "n"},
    TestEntry{1879048192, 2147483647, 268435455, 268435455, ""},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, -1879048193, -1879048193, "n"},
    TestEntry{1879048192, 1, 1879048193, 1879048193, ""},
    TestEntry{1879048192, 1879048192, 0, 0, "z"},
    TestEntry{1879048192, -1879048192, -536870912, -536870912, "n"},
    TestEntry{1879048192, 32767, 1879080959, 1879080959, ""},
    TestEntry{1879048192, 32768, 1879080960, 1879080960, ""},
    TestEntry{1879048192, 127, 1879048319, 1879048319, ""},
    TestEntry{1879048192, 128, 1879048320, 1879048320, ""},
    TestEntry{1879048192, 1065353216, 1333788672, 1333788672, ""},
    TestEntry{1879048192, -1082130432, -813694976, -813694976, "n"},
    TestEntry{1879048192, 1073741824, 805306368, 805306368, ""},
    TestEntry{1879048192, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{-1879048192, -2147483648, 268435456, 268435456, ""},
    TestEntry{-1879048192, 2147483647, -268435457, -268435457, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, 1879048191, 1879048191, ""},
    TestEntry{-1879048192, 1, -1879048191, -1879048191, "n"},
    TestEntry{-1879048192, 1879048192, -536870912, -536870912, "n"},
    TestEntry{-1879048192, -1879048192, 0, 0, "z"},
    TestEntry{-1879048192, 32767, -1879015425, -1879015425, "n"},
    TestEntry{-1879048192, 32768, -1879015424, -1879015424, "n"},
    TestEntry{-1879048192, 127, -1879048065, -1879048065, "n"},
    TestEntry{-1879048192, 128, -1879048064, -1879048064, "n"},
    TestEntry{-1879048192, 1065353216, -1350565888, -1350565888, "n"},
    TestEntry{-1879048192, -1082130432, 796917760, 796917760, ""},
    TestEntry{-1879048192, 1073741824, -805306368, -805306368, "n"},
    TestEntry{-1879048192, -268435456, 1610612736, 1610612736, ""},
    TestEntry{32767, -2147483648, -2147450881, -2147450881, "n"},
    TestEntry{32767, 2147483647, 2147450880, 2147450880, ""},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, -32768, -32768, "n"},
    TestEntry{32767, 1, 32766, 32766, ""},
    TestEntry{32767, 1879048192, 1879080959, 1879080959, ""},
    TestEntry{32767, -1879048192, -1879015425, -1879015425, "n"},
    TestEntry{32767, 32767, 0, 0, "z"},
    TestEntry{32767, 32768, 65535, 65535, ""},
    TestEntry{32767, 127, 32640, 32640, ""},
    TestEntry{32767, 128, 32639, 32639, ""},
    TestEntry{32767, 1065353216, 1065385983, 1065385983, ""},
    TestEntry{32767, -1082130432, -1082097665, -1082097665, "n"},
    TestEntry{32767, 1073741824, 1073774591, 1073774591, ""},
    TestEntry{32767, -268435456, -268402689, -268402689, "n"},
    TestEntry{32768, -2147483648, -2147450880, -2147450880, "n"},
    TestEntry{32768, 2147483647, 2147450879, 2147450879, ""},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, -32769, -32769, "n"},
    TestEntry{32768, 1, 32769, 32769, ""},
    TestEntry{32768, 1879048192, 1879080960, 1879080960, ""},
    TestEntry{32768, -1879048192, -1879015424, -1879015424, "n"},
    TestEntry{32768, 32767, 65535, 65535, ""},
    TestEntry{32768, 32768, 0, 0, "z"},
    TestEntry{32768, 127, 32895, 32895, ""},
    TestEntry{32768, 128, 32896, 32896, ""},
    TestEntry{32768, 1065353216, 1065385984, 1065385984, ""},
    TestEntry{32768, -1082130432, -1082097664, -1082097664, "n"},
    TestEntry{32768, 1073741824, 1073774592, 1073774592, ""},
    TestEntry{32768, -268435456, -268402688, -268402688, "n"},
    TestEntry{127, -2147483648, -2147483521, -2147483521, "n"},
    TestEntry{127, 2147483647, 2147483520, 2147483520, ""},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, -128, -128, "n"},
    TestEntry{127, 1, 126, 126, ""},
    TestEntry{127, 1879048192, 1879048319, 1879048319, ""},
    TestEntry{127, -1879048192, -1879048065, -1879048065, "n"},
    TestEntry{127, 32767, 32640, 32640, ""},
    TestEntry{127, 32768, 32895, 32895, ""},
    TestEntry{127, 127, 0, 0, "z"},
    TestEntry{127, 128, 255, 255, ""},
    TestEntry{127, 1065353216, 1065353343, 1065353343, ""},
    TestEntry{127, -1082130432, -1082130305, -1082130305, "n"},
    TestEntry{127, 1073741824, 1073741951, 1073741951, ""},
    TestEntry{127, -268435456, -268435329, -268435329, "n"},
    TestEntry{128, -2147483648, -2147483520, -2147483520, "n"},
    TestEntry{128, 2147483647, 2147483519, 2147483519, ""},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, -129, -129, "n"},
    TestEntry{128, 1, 129, 129, ""},
    TestEntry{128, 1879048192, 1879048320, 1879048320, ""},
    TestEntry{128, -1879048192, -1879048064, -1879048064, "n"},
    TestEntry{128, 32767, 32639, 32639, ""},
    TestEntry{128, 32768, 32896, 32896, ""},
    TestEntry{128, 127, 255, 255, ""},
    TestEntry{128, 128, 0, 0, "z"},
    TestEntry{128, 1065353216, 1065353344, 1065353344, ""},
    TestEntry{128, -1082130432, -1082130304, -1082130304, "n"},
    TestEntry{128, 1073741824, 1073741952, 1073741952, ""},
    TestEntry{128, -268435456, -268435328, -268435328, "n"},
    TestEntry{1065353216, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 2147483647, 1082130431, 1082130431, ""},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, -1065353217, -1065353217, "n"},
    TestEntry{1065353216, 1, 1065353217, 1065353217, ""},
    TestEntry{1065353216, 1879048192, 1333788672, 1333788672, ""},
    TestEntry{1065353216, -1879048192, -1350565888, -1350565888, "n"},
    TestEntry{1065353216, 32767, 1065385983, 1065385983, ""},
    TestEntry{1065353216, 32768, 1065385984, 1065385984, ""},
    TestEntry{1065353216, 127, 1065353343, 1065353343, ""},
    TestEntry{1065353216, 128, 1065353344, 1065353344, ""},
    TestEntry{1065353216, 1065353216, 0, 0, "z"},
    TestEntry{1065353216, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{1065353216, 1073741824, 2139095040, 2139095040, ""},
    TestEntry{1065353216, -268435456, -813694976, -813694976, "n"},
    TestEntry{-1082130432, -2147483648, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 2147483647, -1065353217, -1065353217, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, 1082130431, 1082130431, ""},
    TestEntry{-1082130432, 1, -1082130431, -1082130431, "n"},
    TestEntry{-1082130432, 1879048192, -813694976, -813694976, "n"},
    TestEntry{-1082130432, -1879048192, 796917760, 796917760, ""},
    TestEntry{-1082130432, 32767, -1082097665, -1082097665, "n"},
    TestEntry{-1082130432, 32768, -1082097664, -1082097664, "n"},
    TestEntry{-1082130432, 127, -1082130305, -1082130305, "n"},
    TestEntry{-1082130432, 128, -1082130304, -1082130304, "n"},
    TestEntry{-1082130432, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-1082130432, -1082130432, 0, 0, "z"},
    TestEntry{-1082130432, 1073741824, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -268435456, 1333788672, 1333788672, ""},
    TestEntry{1073741824, -2147483648, -1073741824, -1073741824, "n"},
    TestEntry{1073741824, 2147483647, 1073741823, 1073741823, ""},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, -1073741825, -1073741825, "n"},
    TestEntry{1073741824, 1, 1073741825, 1073741825, ""},
    TestEntry{1073741824, 1879048192, 805306368, 805306368, ""},
    TestEntry{1073741824, -1879048192, -805306368, -805306368, "n"},
    TestEntry{1073741824, 32767, 1073774591, 1073774591, ""},
    TestEntry{1073741824, 32768, 1073774592, 1073774592, ""},
    TestEntry{1073741824, 127, 1073741951, 1073741951, ""},
    TestEntry{1073741824, 128, 1073741952, 1073741952, ""},
    TestEntry{1073741824, 1065353216, 2139095040, 2139095040, ""},
    TestEntry{1073741824, -1082130432, -8388608, -8388608, "n"},
    TestEntry{1073741824, 1073741824, 0, 0, "z"},
    TestEntry{1073741824, -268435456, -1342177280, -1342177280, "n"},
    TestEntry{-268435456, -2147483648, 1879048192, 1879048192, ""},
    TestEntry{-268435456, 2147483647, -1879048193, -1879048193, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, 268435455, 268435455, ""},
    TestEntry{-268435456, 1, -268435455, -268435455, "n"},
    TestEntry{-268435456, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-268435456, -1879048192, 1610612736, 1610612736, ""},
    TestEntry{-268435456, 32767, -268402689, -268402689, "n"},
    TestEntry{-268435456, 32768, -268402688, -268402688, "n"},
    TestEntry{-268435456, 127, -268435329, -268435329, "n"},
    TestEntry{-268435456, 128, -268435328, -268435328, "n"},
    TestEntry{-268435456, 1065353216, -813694976, -813694976, "n"},
    TestEntry{-268435456, -1082130432, 1333788672, 1333788672, ""},
    TestEntry{-268435456, 1073741824, -1342177280, -1342177280, "n"},
    TestEntry{-268435456, -268435456, 0, 0, "z"},
};

static const std::vector<TestEntry> TEST_OP_CLZ = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{2147483647, -2147483648, 1, 1, ""},
    TestEntry{0, -2147483648, 32, 32, ""},
    TestEntry{-1, -2147483648, 0, 0, "z"},
    TestEntry{1, -2147483648, 31, 31, ""},
    TestEntry{1879048192, -2147483648, 1, 1, ""},
    TestEntry{-1879048192, -2147483648, 0, 0, "z"},
    TestEntry{32767, -2147483648, 17, 17, ""},
    TestEntry{32768, -2147483648, 16, 16, ""},
    TestEntry{127, -2147483648, 25, 25, ""},
    TestEntry{128, -2147483648, 24, 24, ""},
    TestEntry{1065353216, -2147483648, 2, 2, ""},
    TestEntry{-1082130432, -2147483648, 0, 0, "z"},
    TestEntry{1073741824, -2147483648, 1, 1, ""},
    TestEntry{-268435456, -2147483648, 0, 0, "z"},
};

static const std::vector<TestEntry> TEST_OP_FADD = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{-2147483648, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{-2147483648, 0, 0, 0, "z"},
    TestEntry{-2147483648, -1, -8388608, -8388608, "n"},
    TestEntry{-2147483648, 1, 0, 0, "z"},
    TestEntry{-2147483648, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{-2147483648, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-2147483648, 32767, 0, 0, "z"},
    TestEntry{-2147483648, 32768, 0, 0, "z"},
    TestEntry{-2147483648, 127, 0, 0, "z"},
    TestEntry{-2147483648, 128, 0, 0, "z"},
    TestEntry{-2147483648, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{-2147483648, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{-2147483648, -268435456, -268435456, -268435456, "n"},
    TestEntry{2147483647, -2147483648, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 0, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -1, -8388608, -8388608, "n"},
    TestEntry{2147483647, 1, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 1879048192, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -1879048192, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 32767, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 32768, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 127, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 128, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 1065353216, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -1082130432, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 1073741824, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -268435456, 2139095040, 2139095040, "c"},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, -8388608, -8388608, "n"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{0, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1, -2147483648, -8388608, -8388608, "n"},
    TestEntry{-1, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{-1, 0, -8388608, -8388608, "n"},
    TestEntry{-1, -1, -8388608, -8388608, "n"},
    TestEntry{-1, 1, -8388608, -8388608, "n"},
    TestEntry{-1, 1879048192, -8388608, -8388608, "n"},
    TestEntry{-1, -1879048192, -8388608, -8388608, "n"},
    TestEntry{-1, 32767, -8388608, -8388608, "n"},
    TestEntry{-1, 32768, -8388608, -8388608, "n"},
    TestEntry{-1, 127, -8388608, -8388608, "n"},
    TestEntry{-1, 128, -8388608, -8388608, "n"},
    TestEntry{-1, 1065353216, -8388608, -8388608, "n"},
    TestEntry{-1, -1082130432, -8388608, -8388608, "n"},
    TestEntry{-1, 1073741824, -8388608, -8388608, "n"},
    TestEntry{-1, -268435456, -8388608, -8388608, "n"},
    TestEntry{1, -2147483648, 0, 0, "z"},
    TestEntry{1, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{1, 0, 0, 0, "z"},
    TestEntry{1, -1, -8388608, -8388608, "n"},
    TestEntry{1, 1, 0, 0, "z"},
    TestEntry{1, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{1, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{1, 32767, 0, 0, "z"},
    TestEntry{1, 32768, 0, 0, "z"},
    TestEntry{1, 127, 0, 0, "z"},
    TestEntry{1, 128, 0, 0, "z"},
    TestEntry{1, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{1, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{1, -268435456, -268435456, -268435456, "n"},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1, -8388608, -8388608, "n"},
    TestEntry{1879048192, 1, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1879048192, 1887436800, 1887436800, "c"},
    TestEntry{1879048192, -1879048192, 1879048191, 1879048191, "c"},
    TestEntry{1879048192, 32767, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 127, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1082130432, 1879048191, 1879048191, "c"},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -268435456, 0, 0, "z"},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -8388608, -8388608, "n"},
    TestEntry{-1879048192, 1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1879048192, 1879048191, 1879048191, "c"},
    TestEntry{-1879048192, -1879048192, -1870659584, -1870659584, "n"},
    TestEntry{-1879048192, 32767, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, 1065353215, 1065353215, "c"},
    TestEntry{-1879048192, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1879048192, 1073741824, 1073741823, 1073741823, "c"},
    TestEntry{-1879048192, -268435456, -268435456, -268435456, "n"},
    TestEntry{32767, -2147483648, 0, 0, "z"},
    TestEntry{32767, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{32767, 0, 0, 0, "z"},
    TestEntry{32767, -1, -8388608, -8388608, "n"},
    TestEntry{32767, 1, 0, 0, "z"},
    TestEntry{32767, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{32767, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{32767, 32767, 0, 0, "z"},
    TestEntry{32767, 32768, 0, 0, "z"},
    TestEntry{32767, 127, 0, 0, "z"},
    TestEntry{32767, 128, 0, 0, "z"},
    TestEntry{32767, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{32767, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{32767, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{32767, -268435456, -268435456, -268435456, "n"},
    TestEntry{32768, -2147483648, 0, 0, "z"},
    TestEntry{32768, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{32768, 0, 0, 0, "z"},
    TestEntry{32768, -1, -8388608, -8388608, "n"},
    TestEntry{32768, 1, 0, 0, "z"},
    TestEntry{32768, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{32768, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{32768, 32767, 0, 0, "z"},
    TestEntry{32768, 32768, 0, 0, "z"},
    TestEntry{32768, 127, 0, 0, "z"},
    TestEntry{32768, 128, 0, 0, "z"},
    TestEntry{32768, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{32768, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{32768, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{32768, -268435456, -268435456, -268435456, "n"},
    TestEntry{127, -2147483648, 0, 0, "z"},
    TestEntry{127, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{127, 0, 0, 0, "z"},
    TestEntry{127, -1, -8388608, -8388608, "n"},
    TestEntry{127, 1, 0, 0, "z"},
    TestEntry{127, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{127, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{127, 32767, 0, 0, "z"},
    TestEntry{127, 32768, 0, 0, "z"},
    TestEntry{127, 127, 0, 0, "z"},
    TestEntry{127, 128, 0, 0, "z"},
    TestEntry{127, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{127, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{127, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{127, -268435456, -268435456, -268435456, "n"},
    TestEntry{128, -2147483648, 0, 0, "z"},
    TestEntry{128, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{128, 0, 0, 0, "z"},
    TestEntry{128, -1, -8388608, -8388608, "n"},
    TestEntry{128, 1, 0, 0, "z"},
    TestEntry{128, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{128, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{128, 32767, 0, 0, "z"},
    TestEntry{128, 32768, 0, 0, "z"},
    TestEntry{128, 127, 0, 0, "z"},
    TestEntry{128, 128, 0, 0, "z"},
    TestEntry{128, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{128, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{128, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{128, -268435456, -268435456, -268435456, "n"},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, -1, -8388608, -8388608, "n"},
    TestEntry{1065353216, 1, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{1065353216, -1879048192, 1065353215, 1065353215, "c"},
    TestEntry{1065353216, 32767, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 127, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1065353216, 1073741824, 1073741824, "c"},
    TestEntry{1065353216, -1082130432, 0, 0, "z"},
    TestEntry{1065353216, 1073741824, 1077936128, 1077936128, "c"},
    TestEntry{1065353216, -268435456, -268435457, -268435457, "n"},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1879048192, 1879048191, 1879048191, "c"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, 0, 0, "z"},
    TestEntry{-1082130432, -1082130432, -1073741824, -1073741824, "n"},
    TestEntry{-1082130432, 1073741824, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, -268435456, -268435456, -268435456, "n"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1, -8388608, -8388608, "n"},
    TestEntry{1073741824, 1, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{1073741824, -1879048192, 1073741823, 1073741823, "c"},
    TestEntry{1073741824, 32767, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 127, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1065353216, 1077936128, 1077936128, "c"},
    TestEntry{1073741824, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{1073741824, 1073741824, 1082130432, 1082130432, "c"},
    TestEntry{1073741824, -268435456, -268435457, -268435457, "n"},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, 2139095040, 2139095040, "c"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -8388608, -8388608, "n"},
    TestEntry{-268435456, 1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1879048192, 0, 0, "z"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, -268435456, -268435456, "n"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435457, -268435457, "n"},
    TestEntry{-268435456, -1082130432, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1073741824, -268435457, -268435457, "n"},
    TestEntry{-268435456, -268435456, -260046848, -260046848, "n"},
};

static const std::vector<TestEntry> TEST_OP_FMAX = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-2147483648, 0, 0, 0, "z"},
    TestEntry{-2147483648, -1, -2147483648, -2147483648, "nc"},
    TestEntry{-2147483648, 1, 1, 1, ""},
    TestEntry{-2147483648, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "nc"},
    TestEntry{-2147483648, 32767, 32767, 32767, ""},
    TestEntry{-2147483648, 32768, 32768, 32768, ""},
    TestEntry{-2147483648, 127, 127, 127, ""},
    TestEntry{-2147483648, 128, 128, 128, ""},
    TestEntry{-2147483648, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "nc"},
    TestEntry{-2147483648, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, -2147483648, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1879048192, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 32767, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 127, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1082130432, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -268435456, 2147483647, 2147483647, "c"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "cz"},
    TestEntry{0, 1, 1, 1, ""},
    TestEntry{0, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{0, -1879048192, 0, 0, "cz"},
    TestEntry{0, 32767, 32767, 32767, ""},
    TestEntry{0, 32768, 32768, 32768, ""},
    TestEntry{0, 127, 127, 127, ""},
    TestEntry{0, 128, 128, 128, ""},
    TestEntry{0, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{0, -1082130432, 0, 0, "cz"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{0, -268435456, 0, 0, "cz"},
    TestEntry{-1, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1, 0, 0, 0, "z"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, 1, 1, ""},
    TestEntry{-1, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1, 32767, 32767, 32767, ""},
    TestEntry{-1, 32768, 32768, 32768, ""},
    TestEntry{-1, 127, 127, 127, ""},
    TestEntry{-1, 128, 128, 128, ""},
    TestEntry{-1, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1, -268435456, -268435456, -268435456, "n"},
    TestEntry{1, -2147483648, 1, 1, "c"},
    TestEntry{1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1, 0, 1, 1, "c"},
    TestEntry{1, -1, 1, 1, "c"},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1, -1879048192, 1, 1, "c"},
    TestEntry{1, 32767, 32767, 32767, ""},
    TestEntry{1, 32768, 32768, 32768, ""},
    TestEntry{1, 127, 127, 127, ""},
    TestEntry{1, 128, 128, 128, ""},
    TestEntry{1, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1, -1082130432, 1, 1, "c"},
    TestEntry{1, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1, -268435456, 1, 1, "c"},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1879048192, 0, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32767, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 127, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{-1879048192, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1879048192, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1879048192, 0, 0, 0, "z"},
    TestEntry{-1879048192, -1, -1879048192, -1879048192, "nc"},
    TestEntry{-1879048192, 1, 1, 1, ""},
    TestEntry{-1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, 32767, 32767, ""},
    TestEntry{-1879048192, 32768, 32768, 32768, ""},
    TestEntry{-1879048192, 127, 127, 127, ""},
    TestEntry{-1879048192, 128, 128, 128, ""},
    TestEntry{-1879048192, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "nc"},
    TestEntry{-1879048192, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "nc"},
    TestEntry{32767, -2147483648, 32767, 32767, "c"},
    TestEntry{32767, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32767, 0, 32767, 32767, "c"},
    TestEntry{32767, -1, 32767, 32767, "c"},
    TestEntry{32767, 1, 32767, 32767, "c"},
    TestEntry{32767, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{32767, -1879048192, 32767, 32767, "c"},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 32768, 32768, ""},
    TestEntry{32767, 127, 32767, 32767, "c"},
    TestEntry{32767, 128, 32767, 32767, "c"},
    TestEntry{32767, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{32767, -1082130432, 32767, 32767, "c"},
    TestEntry{32767, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{32767, -268435456, 32767, 32767, "c"},
    TestEntry{32768, -2147483648, 32768, 32768, "c"},
    TestEntry{32768, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32768, 0, 32768, 32768, "c"},
    TestEntry{32768, -1, 32768, 32768, "c"},
    TestEntry{32768, 1, 32768, 32768, "c"},
    TestEntry{32768, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{32768, -1879048192, 32768, 32768, "c"},
    TestEntry{32768, 32767, 32768, 32768, "c"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 32768, 32768, "c"},
    TestEntry{32768, 128, 32768, 32768, "c"},
    TestEntry{32768, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{32768, -1082130432, 32768, 32768, "c"},
    TestEntry{32768, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{32768, -268435456, 32768, 32768, "c"},
    TestEntry{127, -2147483648, 127, 127, "c"},
    TestEntry{127, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{127, 0, 127, 127, "c"},
    TestEntry{127, -1, 127, 127, "c"},
    TestEntry{127, 1, 127, 127, "c"},
    TestEntry{127, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{127, -1879048192, 127, 127, "c"},
    TestEntry{127, 32767, 32767, 32767, ""},
    TestEntry{127, 32768, 32768, 32768, ""},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 128, 128, ""},
    TestEntry{127, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{127, -1082130432, 127, 127, "c"},
    TestEntry{127, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{127, -268435456, 127, 127, "c"},
    TestEntry{128, -2147483648, 128, 128, "c"},
    TestEntry{128, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{128, 0, 128, 128, "c"},
    TestEntry{128, -1, 128, 128, "c"},
    TestEntry{128, 1, 128, 128, "c"},
    TestEntry{128, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{128, -1879048192, 128, 128, "c"},
    TestEntry{128, 32767, 32767, 32767, ""},
    TestEntry{128, 32768, 32768, 32768, ""},
    TestEntry{128, 127, 128, 128, "c"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{128, -1082130432, 128, 128, "c"},
    TestEntry{128, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{128, -268435456, 128, 128, "c"},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1065353216, 0, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, -1, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32767, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 127, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1065353216, -268435456, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1082130432, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1082130432, 0, 0, 0, "z"},
    TestEntry{-1082130432, -1, -1082130432, -1082130432, "nc"},
    TestEntry{-1082130432, 1, 1, 1, ""},
    TestEntry{-1082130432, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1082130432, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1082130432, 32767, 32767, 32767, ""},
    TestEntry{-1082130432, 32768, 32768, 32768, ""},
    TestEntry{-1082130432, 127, 127, 127, ""},
    TestEntry{-1082130432, 128, 128, 128, ""},
    TestEntry{-1082130432, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1082130432, -268435456, -1082130432, -1082130432, "nc"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1073741824, 0, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32767, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 127, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, "c"},
    TestEntry{-268435456, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-268435456, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-268435456, 0, 0, 0, "z"},
    TestEntry{-268435456, -1, -268435456, -268435456, "nc"},
    TestEntry{-268435456, 1, 1, 1, ""},
    TestEntry{-268435456, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-268435456, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-268435456, 32767, 32767, 32767, ""},
    TestEntry{-268435456, 32768, 32768, 32768, ""},
    TestEntry{-268435456, 127, 127, 127, ""},
    TestEntry{-268435456, 128, 128, 128, ""},
    TestEntry{-268435456, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-268435456, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-268435456, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_FMAXABS = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{-2147483648, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-2147483648, 0, 0, 0, "z"},
    TestEntry{-2147483648, -1, 2147483647, 2147483647, ""},
    TestEntry{-2147483648, 1, 1, 1, ""},
    TestEntry{-2147483648, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-2147483648, -1879048192, 268435456, 268435456, ""},
    TestEntry{-2147483648, 32767, 32767, 32767, ""},
    TestEntry{-2147483648, 32768, 32768, 32768, ""},
    TestEntry{-2147483648, 127, 127, 127, ""},
    TestEntry{-2147483648, 128, 128, 128, ""},
    TestEntry{-2147483648, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-2147483648, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{-2147483648, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-2147483648, -268435456, 1879048192, 1879048192, ""},
    TestEntry{2147483647, -2147483648, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1879048192, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 32767, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 127, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1082130432, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -268435456, 2147483647, 2147483647, "c"},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 2147483647, 2147483647, ""},
    TestEntry{0, 1, 1, 1, ""},
    TestEntry{0, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{0, -1879048192, 268435456, 268435456, ""},
    TestEntry{0, 32767, 32767, 32767, ""},
    TestEntry{0, 32768, 32768, 32768, ""},
    TestEntry{0, 127, 127, 127, ""},
    TestEntry{0, 128, 128, 128, ""},
    TestEntry{0, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{0, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{0, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{0, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1, -2147483648, 2147483647, 2147483647, "c"},
    TestEntry{-1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1, 0, 2147483647, 2147483647, "c"},
    TestEntry{-1, -1, 2147483647, 2147483647, ""},
    TestEntry{-1, 1, 2147483647, 2147483647, "c"},
    TestEntry{-1, 1879048192, 2147483647, 2147483647, "c"},
    TestEntry{-1, -1879048192, 2147483647, 2147483647, "c"},
    TestEntry{-1, 32767, 2147483647, 2147483647, "c"},
    TestEntry{-1, 32768, 2147483647, 2147483647, "c"},
    TestEntry{-1, 127, 2147483647, 2147483647, "c"},
    TestEntry{-1, 128, 2147483647, 2147483647, "c"},
    TestEntry{-1, 1065353216, 2147483647, 2147483647, "c"},
    TestEntry{-1, -1082130432, 2147483647, 2147483647, "c"},
    TestEntry{-1, 1073741824, 2147483647, 2147483647, "c"},
    TestEntry{-1, -268435456, 2147483647, 2147483647, "c"},
    TestEntry{1, -2147483648, 1, 1, "c"},
    TestEntry{1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1, 0, 1, 1, "c"},
    TestEntry{1, -1, 2147483647, 2147483647, ""},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1, -1879048192, 268435456, 268435456, ""},
    TestEntry{1, 32767, 32767, 32767, ""},
    TestEntry{1, 32768, 32768, 32768, ""},
    TestEntry{1, 127, 127, 127, ""},
    TestEntry{1, 128, 128, 128, ""},
    TestEntry{1, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1, -268435456, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1879048192, 0, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1, 2147483647, 2147483647, ""},
    TestEntry{1879048192, 1, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32767, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 127, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -2147483648, 268435456, 268435456, "c"},
    TestEntry{-1879048192, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1879048192, 0, 268435456, 268435456, "c"},
    TestEntry{-1879048192, -1, 2147483647, 2147483647, ""},
    TestEntry{-1879048192, 1, 268435456, 268435456, "c"},
    TestEntry{-1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -1879048192, 268435456, 268435456, ""},
    TestEntry{-1879048192, 32767, 268435456, 268435456, "c"},
    TestEntry{-1879048192, 32768, 268435456, 268435456, "c"},
    TestEntry{-1879048192, 127, 268435456, 268435456, "c"},
    TestEntry{-1879048192, 128, 268435456, 268435456, "c"},
    TestEntry{-1879048192, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1879048192, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{-1879048192, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{32767, -2147483648, 32767, 32767, "c"},
    TestEntry{32767, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32767, 0, 32767, 32767, "c"},
    TestEntry{32767, -1, 2147483647, 2147483647, ""},
    TestEntry{32767, 1, 32767, 32767, "c"},
    TestEntry{32767, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{32767, -1879048192, 268435456, 268435456, ""},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 32768, 32768, ""},
    TestEntry{32767, 127, 32767, 32767, "c"},
    TestEntry{32767, 128, 32767, 32767, "c"},
    TestEntry{32767, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{32767, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{32767, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{32767, -268435456, 1879048192, 1879048192, ""},
    TestEntry{32768, -2147483648, 32768, 32768, "c"},
    TestEntry{32768, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32768, 0, 32768, 32768, "c"},
    TestEntry{32768, -1, 2147483647, 2147483647, ""},
    TestEntry{32768, 1, 32768, 32768, "c"},
    TestEntry{32768, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{32768, -1879048192, 268435456, 268435456, ""},
    TestEntry{32768, 32767, 32768, 32768, "c"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 32768, 32768, "c"},
    TestEntry{32768, 128, 32768, 32768, "c"},
    TestEntry{32768, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{32768, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{32768, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{32768, -268435456, 1879048192, 1879048192, ""},
    TestEntry{127, -2147483648, 127, 127, "c"},
    TestEntry{127, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{127, 0, 127, 127, "c"},
    TestEntry{127, -1, 2147483647, 2147483647, ""},
    TestEntry{127, 1, 127, 127, "c"},
    TestEntry{127, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{127, -1879048192, 268435456, 268435456, ""},
    TestEntry{127, 32767, 32767, 32767, ""},
    TestEntry{127, 32768, 32768, 32768, ""},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 128, 128, ""},
    TestEntry{127, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{127, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{127, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{127, -268435456, 1879048192, 1879048192, ""},
    TestEntry{128, -2147483648, 128, 128, "c"},
    TestEntry{128, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{128, 0, 128, 128, "c"},
    TestEntry{128, -1, 2147483647, 2147483647, ""},
    TestEntry{128, 1, 128, 128, "c"},
    TestEntry{128, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{128, -1879048192, 268435456, 268435456, ""},
    TestEntry{128, 32767, 32767, 32767, ""},
    TestEntry{128, 32768, 32768, 32768, ""},
    TestEntry{128, 127, 128, 128, "c"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{128, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{128, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{128, -268435456, 1879048192, 1879048192, ""},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1065353216, 0, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, -1, 2147483647, 2147483647, ""},
    TestEntry{1065353216, 1, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32767, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 127, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1065353216, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1082130432, -2147483648, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1082130432, 0, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, -1, 2147483647, 2147483647, ""},
    TestEntry{-1082130432, 1, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1082130432, -1879048192, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, 32767, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, 32768, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, 127, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, 128, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1082130432, -268435456, 1879048192, 1879048192, ""},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1073741824, 0, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1, 2147483647, 2147483647, ""},
    TestEntry{1073741824, 1, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32767, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 127, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-268435456, -2147483648, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-268435456, 0, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, -1, 2147483647, 2147483647, ""},
    TestEntry{-268435456, 1, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-268435456, -1879048192, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 32767, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 32768, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 127, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 128, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 1065353216, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, -1082130432, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, 1073741824, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, -268435456, 1879048192, 1879048192, ""},
};

static const std::vector<TestEntry> TEST_OP_FMIN = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, -1, -1, "nc"},
    TestEntry{-2147483648, 1, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{-2147483648, 32767, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32768, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 127, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 128, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{-2147483648, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -268435456, -268435456, -268435456, "nc"},
    TestEntry{2147483647, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 0, 0, "cz"},
    TestEntry{2147483647, -1, -1, -1, "nc"},
    TestEntry{2147483647, 1, 1, 1, "c"},
    TestEntry{2147483647, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{2147483647, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{2147483647, 32767, 32767, 32767, "c"},
    TestEntry{2147483647, 32768, 32768, 32768, "c"},
    TestEntry{2147483647, 127, 127, 127, "c"},
    TestEntry{2147483647, 128, 128, 128, "c"},
    TestEntry{2147483647, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{2147483647, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{2147483647, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{2147483647, -268435456, -268435456, -268435456, "nc"},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, -1, -1, "nc"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, -1, -1, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, -1, -1, "n"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, -1, -1, "n"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -1, -1, "n"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1, 2147483647, 1, 1, ""},
    TestEntry{1, 0, 0, 0, "cz"},
    TestEntry{1, -1, -1, -1, "nc"},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1, 32767, 1, 1, ""},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, 1, 1, ""},
    TestEntry{1, 128, 1, 1, ""},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, -268435456, -268435456, "nc"},
    TestEntry{1879048192, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1879048192, 2147483647, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 0, 0, 0, "cz"},
    TestEntry{1879048192, -1, -1, -1, "nc"},
    TestEntry{1879048192, 1, 1, 1, "c"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1879048192, 32767, 32767, 32767, "c"},
    TestEntry{1879048192, 32768, 32768, 32768, "c"},
    TestEntry{1879048192, 127, 127, 127, "c"},
    TestEntry{1879048192, 128, 128, 128, "c"},
    TestEntry{1879048192, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1879048192, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1879048192, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{1879048192, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1, -1, "nc"},
    TestEntry{-1879048192, 1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{-1879048192, 1073741824, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -268435456, -268435456, -268435456, "nc"},
    TestEntry{32767, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{32767, 2147483647, 32767, 32767, ""},
    TestEntry{32767, 0, 0, 0, "cz"},
    TestEntry{32767, -1, -1, -1, "nc"},
    TestEntry{32767, 1, 1, 1, "c"},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 32767, 32767, ""},
    TestEntry{32767, 127, 127, 127, "c"},
    TestEntry{32767, 128, 128, 128, "c"},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, -268435456, -268435456, "nc"},
    TestEntry{32768, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{32768, 2147483647, 32768, 32768, ""},
    TestEntry{32768, 0, 0, 0, "cz"},
    TestEntry{32768, -1, -1, -1, "nc"},
    TestEntry{32768, 1, 1, 1, "c"},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{32768, 32767, 32767, 32767, "c"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 127, 127, "c"},
    TestEntry{32768, 128, 128, 128, "c"},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, -268435456, -268435456, "nc"},
    TestEntry{127, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{127, 2147483647, 127, 127, ""},
    TestEntry{127, 0, 0, 0, "cz"},
    TestEntry{127, -1, -1, -1, "nc"},
    TestEntry{127, 1, 1, 1, "c"},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{127, 32767, 127, 127, ""},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 127, 127, ""},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, -268435456, -268435456, "nc"},
    TestEntry{128, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{128, 2147483647, 128, 128, ""},
    TestEntry{128, 0, 0, 0, "cz"},
    TestEntry{128, -1, -1, -1, "nc"},
    TestEntry{128, 1, 1, 1, "c"},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{128, 32767, 128, 128, ""},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 127, 127, "c"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, -268435456, -268435456, "nc"},
    TestEntry{1065353216, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1065353216, 2147483647, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 0, 0, 0, "cz"},
    TestEntry{1065353216, -1, -1, -1, "nc"},
    TestEntry{1065353216, 1, 1, 1, "c"},
    TestEntry{1065353216, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1065353216, 32767, 32767, 32767, "c"},
    TestEntry{1065353216, 32768, 32768, 32768, "c"},
    TestEntry{1065353216, 127, 127, 127, "c"},
    TestEntry{1065353216, 128, 128, 128, "c"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1065353216, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1, -1, "nc"},
    TestEntry{-1082130432, 1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -268435456, -268435456, -268435456, "nc"},
    TestEntry{1073741824, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1073741824, 2147483647, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 0, 0, 0, "cz"},
    TestEntry{1073741824, -1, -1, -1, "nc"},
    TestEntry{1073741824, 1, 1, 1, "c"},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1073741824, 32767, 32767, 32767, "c"},
    TestEntry{1073741824, 32768, 32768, 32768, "c"},
    TestEntry{1073741824, 127, 127, 127, "c"},
    TestEntry{1073741824, 128, 128, 128, "c"},
    TestEntry{1073741824, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1073741824, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, -268435456, -268435456, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -1, -1, "nc"},
    TestEntry{-268435456, 1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, -268435456, -268435456, "n"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_FMINABS = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{-2147483648, 2147483647, 0, 0, "z"},
    TestEntry{-2147483648, 0, 0, 0, "z"},
    TestEntry{-2147483648, -1, 0, 0, "z"},
    TestEntry{-2147483648, 1, 0, 0, "z"},
    TestEntry{-2147483648, 1879048192, 0, 0, "z"},
    TestEntry{-2147483648, -1879048192, 0, 0, "z"},
    TestEntry{-2147483648, 32767, 0, 0, "z"},
    TestEntry{-2147483648, 32768, 0, 0, "z"},
    TestEntry{-2147483648, 127, 0, 0, "z"},
    TestEntry{-2147483648, 128, 0, 0, "z"},
    TestEntry{-2147483648, 1065353216, 0, 0, "z"},
    TestEntry{-2147483648, -1082130432, 0, 0, "z"},
    TestEntry{-2147483648, 1073741824, 0, 0, "z"},
    TestEntry{-2147483648, -268435456, 0, 0, "z"},
    TestEntry{2147483647, -2147483648, 0, 0, "cz"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 0, 0, "cz"},
    TestEntry{2147483647, -1, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1, 1, 1, "c"},
    TestEntry{2147483647, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{2147483647, -1879048192, 268435456, 268435456, "c"},
    TestEntry{2147483647, 32767, 32767, 32767, "c"},
    TestEntry{2147483647, 32768, 32768, 32768, "c"},
    TestEntry{2147483647, 127, 127, 127, "c"},
    TestEntry{2147483647, 128, 128, 128, "c"},
    TestEntry{2147483647, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{2147483647, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{2147483647, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{2147483647, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "z"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, 0, 0, "z"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, 0, 0, "z"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, 0, 0, "z"},
    TestEntry{-1, -2147483648, 0, 0, "cz"},
    TestEntry{-1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1, 0, 0, 0, "cz"},
    TestEntry{-1, -1, 2147483647, 2147483647, ""},
    TestEntry{-1, 1, 1, 1, "c"},
    TestEntry{-1, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{-1, -1879048192, 268435456, 268435456, "c"},
    TestEntry{-1, 32767, 32767, 32767, "c"},
    TestEntry{-1, 32768, 32768, 32768, "c"},
    TestEntry{-1, 127, 127, 127, "c"},
    TestEntry{-1, 128, 128, 128, "c"},
    TestEntry{-1, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{-1, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{-1, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{-1, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{1, -2147483648, 0, 0, "cz"},
    TestEntry{1, 2147483647, 1, 1, ""},
    TestEntry{1, 0, 0, 0, "cz"},
    TestEntry{1, -1, 1, 1, ""},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, 1, 1, ""},
    TestEntry{1, 32767, 1, 1, ""},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, 1, 1, ""},
    TestEntry{1, 128, 1, 1, ""},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, 1, 1, ""},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, 1, 1, ""},
    TestEntry{1879048192, -2147483648, 0, 0, "cz"},
    TestEntry{1879048192, 2147483647, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 0, 0, 0, "cz"},
    TestEntry{1879048192, -1, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1, 1, 1, "c"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 268435456, 268435456, "c"},
    TestEntry{1879048192, 32767, 32767, 32767, "c"},
    TestEntry{1879048192, 32768, 32768, 32768, "c"},
    TestEntry{1879048192, 127, 127, 127, "c"},
    TestEntry{1879048192, 128, 128, 128, "c"},
    TestEntry{1879048192, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1879048192, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{1879048192, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -2147483648, 0, 0, "cz"},
    TestEntry{-1879048192, 2147483647, 268435456, 268435456, ""},
    TestEntry{-1879048192, 0, 0, 0, "cz"},
    TestEntry{-1879048192, -1, 268435456, 268435456, ""},
    TestEntry{-1879048192, 1, 1, 1, "c"},
    TestEntry{-1879048192, 1879048192, 268435456, 268435456, ""},
    TestEntry{-1879048192, -1879048192, 268435456, 268435456, ""},
    TestEntry{-1879048192, 32767, 32767, 32767, "c"},
    TestEntry{-1879048192, 32768, 32768, 32768, "c"},
    TestEntry{-1879048192, 127, 127, 127, "c"},
    TestEntry{-1879048192, 128, 128, 128, "c"},
    TestEntry{-1879048192, 1065353216, 268435456, 268435456, ""},
    TestEntry{-1879048192, -1082130432, 268435456, 268435456, ""},
    TestEntry{-1879048192, 1073741824, 268435456, 268435456, ""},
    TestEntry{-1879048192, -268435456, 268435456, 268435456, ""},
    TestEntry{32767, -2147483648, 0, 0, "cz"},
    TestEntry{32767, 2147483647, 32767, 32767, ""},
    TestEntry{32767, 0, 0, 0, "cz"},
    TestEntry{32767, -1, 32767, 32767, ""},
    TestEntry{32767, 1, 1, 1, "c"},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, 32767, 32767, ""},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 32767, 32767, ""},
    TestEntry{32767, 127, 127, 127, "c"},
    TestEntry{32767, 128, 128, 128, "c"},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, 32767, 32767, ""},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, 32767, 32767, ""},
    TestEntry{32768, -2147483648, 0, 0, "cz"},
    TestEntry{32768, 2147483647, 32768, 32768, ""},
    TestEntry{32768, 0, 0, 0, "cz"},
    TestEntry{32768, -1, 32768, 32768, ""},
    TestEntry{32768, 1, 1, 1, "c"},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, 32768, 32768, ""},
    TestEntry{32768, 32767, 32767, 32767, "c"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 127, 127, "c"},
    TestEntry{32768, 128, 128, 128, "c"},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, 32768, 32768, ""},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, 32768, 32768, ""},
    TestEntry{127, -2147483648, 0, 0, "cz"},
    TestEntry{127, 2147483647, 127, 127, ""},
    TestEntry{127, 0, 0, 0, "cz"},
    TestEntry{127, -1, 127, 127, ""},
    TestEntry{127, 1, 1, 1, "c"},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, 127, 127, ""},
    TestEntry{127, 32767, 127, 127, ""},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 127, 127, ""},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, 127, 127, ""},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, 127, 127, ""},
    TestEntry{128, -2147483648, 0, 0, "cz"},
    TestEntry{128, 2147483647, 128, 128, ""},
    TestEntry{128, 0, 0, 0, "cz"},
    TestEntry{128, -1, 128, 128, ""},
    TestEntry{128, 1, 1, 1, "c"},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, 128, 128, ""},
    TestEntry{128, 32767, 128, 128, ""},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 127, 127, "c"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, 128, 128, ""},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, 128, 128, ""},
    TestEntry{1065353216, -2147483648, 0, 0, "cz"},
    TestEntry{1065353216, 2147483647, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 0, 0, 0, "cz"},
    TestEntry{1065353216, -1, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1, 1, 1, "c"},
    TestEntry{1065353216, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1879048192, 268435456, 268435456, "c"},
    TestEntry{1065353216, 32767, 32767, 32767, "c"},
    TestEntry{1065353216, 32768, 32768, 32768, "c"},
    TestEntry{1065353216, 127, 127, 127, "c"},
    TestEntry{1065353216, 128, 128, 128, "c"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -268435456, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -2147483648, 0, 0, "cz"},
    TestEntry{-1082130432, 2147483647, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 0, 0, 0, "cz"},
    TestEntry{-1082130432, -1, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 1, 1, 1, "c"},
    TestEntry{-1082130432, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -1879048192, 268435456, 268435456, "c"},
    TestEntry{-1082130432, 32767, 32767, 32767, "c"},
    TestEntry{-1082130432, 32768, 32768, 32768, "c"},
    TestEntry{-1082130432, 127, 127, 127, "c"},
    TestEntry{-1082130432, 128, 128, 128, "c"},
    TestEntry{-1082130432, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -268435456, 1065353216, 1065353216, ""},
    TestEntry{1073741824, -2147483648, 0, 0, "cz"},
    TestEntry{1073741824, 2147483647, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 0, 0, 0, "cz"},
    TestEntry{1073741824, -1, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1, 1, 1, "c"},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, 268435456, 268435456, "c"},
    TestEntry{1073741824, 32767, 32767, 32767, "c"},
    TestEntry{1073741824, 32768, 32768, 32768, "c"},
    TestEntry{1073741824, 127, 127, 127, "c"},
    TestEntry{1073741824, 128, 128, 128, "c"},
    TestEntry{1073741824, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1073741824, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -2147483648, 0, 0, "cz"},
    TestEntry{-268435456, 2147483647, 1879048192, 1879048192, ""},
    TestEntry{-268435456, 0, 0, 0, "cz"},
    TestEntry{-268435456, -1, 1879048192, 1879048192, ""},
    TestEntry{-268435456, 1, 1, 1, "c"},
    TestEntry{-268435456, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-268435456, -1879048192, 268435456, 268435456, "c"},
    TestEntry{-268435456, 32767, 32767, 32767, "c"},
    TestEntry{-268435456, 32768, 32768, 32768, "c"},
    TestEntry{-268435456, 127, 127, 127, "c"},
    TestEntry{-268435456, 128, 128, 128, "c"},
    TestEntry{-268435456, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{-268435456, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{-268435456, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{-268435456, -268435456, 1879048192, 1879048192, ""},
};

static const std::vector<TestEntry> TEST_OP_FMUL = {
    TestEntry{-2147483648, -2147483648, 0, 0, "n"},
    TestEntry{-2147483648, 2147483647, 0, 0, "n"},
    TestEntry{-2147483648, 0, 0, 0, "n"},
    TestEntry{-2147483648, -1, 0, 0, "n"},
    TestEntry{-2147483648, 1, 0, 0, "n"},
    TestEntry{-2147483648, 1879048192, 0, 0, "n"},
    TestEntry{-2147483648, -1879048192, 0, 0, "n"},
    TestEntry{-2147483648, 32767, 0, 0, "n"},
    TestEntry{-2147483648, 32768, 0, 0, "n"},
    TestEntry{-2147483648, 127, 0, 0, "n"},
    TestEntry{-2147483648, 128, 0, 0, "n"},
    TestEntry{-2147483648, 1065353216, 0, 0, "n"},
    TestEntry{-2147483648, -1082130432, 0, 0, "n"},
    TestEntry{-2147483648, 1073741824, 0, 0, "n"},
    TestEntry{-2147483648, -268435456, 0, 0, "n"},
    TestEntry{2147483647, -2147483648, 0, 0, "n"},
    TestEntry{2147483647, 2147483647, 2139095040, 2139095040, "n"},
    TestEntry{2147483647, 0, 0, 0, "n"},
    TestEntry{2147483647, -1, -8388608, -8388608, "n"},
    TestEntry{2147483647, 1, 0, 0, "n"},
    TestEntry{2147483647, 1879048192, 2139095040, 2139095040, "n"},
    TestEntry{2147483647, -1879048192, -8388608, -8388608, "n"},
    TestEntry{2147483647, 32767, 0, 0, "n"},
    TestEntry{2147483647, 32768, 0, 0, "n"},
    TestEntry{2147483647, 127, 0, 0, "n"},
    TestEntry{2147483647, 128, 0, 0, "n"},
    TestEntry{2147483647, 1065353216, 2139095040, 2139095040, "n"},
    TestEntry{2147483647, -1082130432, -8388608, -8388608, "n"},
    TestEntry{2147483647, 1073741824, 2139095040, 2139095040, "n"},
    TestEntry{2147483647, -268435456, -8388608, -8388608, "n"},
    TestEntry{0, -2147483648, 0, 0, "n"},
    TestEntry{0, 2147483647, 0, 0, "n"},
    TestEntry{0, 0, 0, 0, "n"},
    TestEntry{0, -1, 0, 0, "n"},
    TestEntry{0, 1, 0, 0, "n"},
    TestEntry{0, 1879048192, 0, 0, "n"},
    TestEntry{0, -1879048192, 0, 0, "n"},
    TestEntry{0, 32767, 0, 0, "n"},
    TestEntry{0, 32768, 0, 0, "n"},
    TestEntry{0, 127, 0, 0, "n"},
    TestEntry{0, 128, 0, 0, "n"},
    TestEntry{0, 1065353216, 0, 0, "n"},
    TestEntry{0, -1082130432, 0, 0, "n"},
    TestEntry{0, 1073741824, 0, 0, "n"},
    TestEntry{0, -268435456, 0, 0, "n"},
    TestEntry{-1, -2147483648, 0, 0, "n"},
    TestEntry{-1, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-1, 0, 0, 0, "n"},
    TestEntry{-1, -1, 2139095040, 2139095040, "n"},
    TestEntry{-1, 1, 0, 0, "n"},
    TestEntry{-1, 1879048192, -8388608, -8388608, "n"},
    TestEntry{-1, -1879048192, 2139095040, 2139095040, "n"},
    TestEntry{-1, 32767, 0, 0, "n"},
    TestEntry{-1, 32768, 0, 0, "n"},
    TestEntry{-1, 127, 0, 0, "n"},
    TestEntry{-1, 128, 0, 0, "n"},
    TestEntry{-1, 1065353216, -8388608, -8388608, "n"},
    TestEntry{-1, -1082130432, 2139095040, 2139095040, "n"},
    TestEntry{-1, 1073741824, -8388608, -8388608, "n"},
    TestEntry{-1, -268435456, 2139095040, 2139095040, "n"},
    TestEntry{1, -2147483648, 0, 0, "n"},
    TestEntry{1, 2147483647, 0, 0, "n"},
    TestEntry{1, 0, 0, 0, "n"},
    TestEntry{1, -1, 0, 0, "n"},
    TestEntry{1, 1, 0, 0, "n"},
    TestEntry{1, 1879048192, 0, 0, "n"},
    TestEntry{1, -1879048192, 0, 0, "n"},
    TestEntry{1, 32767, 0, 0, "n"},
    TestEntry{1, 32768, 0, 0, "n"},
    TestEntry{1, 127, 0, 0, "n"},
    TestEntry{1, 128, 0, 0, "n"},
    TestEntry{1, 1065353216, 0, 0, "n"},
    TestEntry{1, -1082130432, 0, 0, "n"},
    TestEntry{1, 1073741824, 0, 0, "n"},
    TestEntry{1, -268435456, 0, 0, "n"},
    TestEntry{1879048192, -2147483648, 0, 0, "n"},
    TestEntry{1879048192, 2147483647, 2139095040, 2139095040, "n"},
    TestEntry{1879048192, 0, 0, 0, "n"},
    TestEntry{1879048192, -1, -8388608, -8388608, "n"},
    TestEntry{1879048192, 1, 0, 0, "n"},
    TestEntry{1879048192, 1879048192, 2139095040, 2139095040, "n"},
    TestEntry{1879048192, -1879048192, -1065353216, -1065353216, "n"},
    TestEntry{1879048192, 32767, 0, 0, "n"},
    TestEntry{1879048192, 32768, 0, 0, "n"},
    TestEntry{1879048192, 127, 0, 0, "n"},
    TestEntry{1879048192, 128, 0, 0, "n"},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, -1082130432, -268435456, -268435456, "n"},
    TestEntry{1879048192, 1073741824, 1887436800, 1887436800, "n"},
    TestEntry{1879048192, -268435456, -8388608, -8388608, "n"},
    TestEntry{-1879048192, -2147483648, 0, 0, "n"},
    TestEntry{-1879048192, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-1879048192, 0, 0, 0, "n"},
    TestEntry{-1879048192, -1, 2139095040, 2139095040, "n"},
    TestEntry{-1879048192, 1, 0, 0, "n"},
    TestEntry{-1879048192, 1879048192, -1065353216, -1065353216, "n"},
    TestEntry{-1879048192, -1879048192, 0, 0, "n"},
    TestEntry{-1879048192, 32767, 0, 0, "n"},
    TestEntry{-1879048192, 32768, 0, 0, "n"},
    TestEntry{-1879048192, 127, 0, 0, "n"},
    TestEntry{-1879048192, 128, 0, 0, "n"},
    TestEntry{-1879048192, 1065353216, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1082130432, 268435456, 268435456, "n"},
    TestEntry{-1879048192, 1073741824, -1870659584, -1870659584, "n"},
    TestEntry{-1879048192, -268435456, 1082130432, 1082130432, "n"},
    TestEntry{32767, -2147483648, 0, 0, "n"},
    TestEntry{32767, 2147483647, 0, 0, "n"},
    TestEntry{32767, 0, 0, 0, "n"},
    TestEntry{32767, -1, 0, 0, "n"},
    TestEntry{32767, 1, 0, 0, "n"},
    TestEntry{32767, 1879048192, 0, 0, "n"},
    TestEntry{32767, -1879048192, 0, 0, "n"},
    TestEntry{32767, 32767, 0, 0, "n"},
    TestEntry{32767, 32768, 0, 0, "n"},
    TestEntry{32767, 127, 0, 0, "n"},
    TestEntry{32767, 128, 0, 0, "n"},
    TestEntry{32767, 1065353216, 0, 0, "n"},
    TestEntry{32767, -1082130432, 0, 0, "n"},
    TestEntry{32767, 1073741824, 0, 0, "n"},
    TestEntry{32767, -268435456, 0, 0, "n"},
    TestEntry{32768, -2147483648, 0, 0, "n"},
    TestEntry{32768, 2147483647, 0, 0, "n"},
    TestEntry{32768, 0, 0, 0, "n"},
    TestEntry{32768, -1, 0, 0, "n"},
    TestEntry{32768, 1, 0, 0, "n"},
    TestEntry{32768, 1879048192, 0, 0, "n"},
    TestEntry{32768, -1879048192, 0, 0, "n"},
    TestEntry{32768, 32767, 0, 0, "n"},
    TestEntry{32768, 32768, 0, 0, "n"},
    TestEntry{32768, 127, 0, 0, "n"},
    TestEntry{32768, 128, 0, 0, "n"},
    TestEntry{32768, 1065353216, 0, 0, "n"},
    TestEntry{32768, -1082130432, 0, 0, "n"},
    TestEntry{32768, 1073741824, 0, 0, "n"},
    TestEntry{32768, -268435456, 0, 0, "n"},
    TestEntry{127, -2147483648, 0, 0, "n"},
    TestEntry{127, 2147483647, 0, 0, "n"},
    TestEntry{127, 0, 0, 0, "n"},
    TestEntry{127, -1, 0, 0, "n"},
    TestEntry{127, 1, 0, 0, "n"},
    TestEntry{127, 1879048192, 0, 0, "n"},
    TestEntry{127, -1879048192, 0, 0, "n"},
    TestEntry{127, 32767, 0, 0, "n"},
    TestEntry{127, 32768, 0, 0, "n"},
    TestEntry{127, 127, 0, 0, "n"},
    TestEntry{127, 128, 0, 0, "n"},
    TestEntry{127, 1065353216, 0, 0, "n"},
    TestEntry{127, -1082130432, 0, 0, "n"},
    TestEntry{127, 1073741824, 0, 0, "n"},
    TestEntry{127, -268435456, 0, 0, "n"},
    TestEntry{128, -2147483648, 0, 0, "n"},
    TestEntry{128, 2147483647, 0, 0, "n"},
    TestEntry{128, 0, 0, 0, "n"},
    TestEntry{128, -1, 0, 0, "n"},
    TestEntry{128, 1, 0, 0, "n"},
    TestEntry{128, 1879048192, 0, 0, "n"},
    TestEntry{128, -1879048192, 0, 0, "n"},
    TestEntry{128, 32767, 0, 0, "n"},
    TestEntry{128, 32768, 0, 0, "n"},
    TestEntry{128, 127, 0, 0, "n"},
    TestEntry{128, 128, 0, 0, "n"},
    TestEntry{128, 1065353216, 0, 0, "n"},
    TestEntry{128, -1082130432, 0, 0, "n"},
    TestEntry{128, 1073741824, 0, 0, "n"},
    TestEntry{128, -268435456, 0, 0, "n"},
    TestEntry{1065353216, -2147483648, 0, 0, "n"},
    TestEntry{1065353216, 2147483647, 2139095040, 2139095040, "n"},
    TestEntry{1065353216, 0, 0, 0, "n"},
    TestEntry{1065353216, -1, -8388608, -8388608, "n"},
    TestEntry{1065353216, 1, 0, 0, "n"},
    TestEntry{1065353216, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{1065353216, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{1065353216, 32767, 0, 0, "n"},
    TestEntry{1065353216, 32768, 0, 0, "n"},
    TestEntry{1065353216, 127, 0, 0, "n"},
    TestEntry{1065353216, 128, 0, 0, "n"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{1065353216, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1082130432, -2147483648, 0, 0, "n"},
    TestEntry{-1082130432, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 0, 0, 0, "n"},
    TestEntry{-1082130432, -1, 2139095040, 2139095040, "n"},
    TestEntry{-1082130432, 1, 0, 0, "n"},
    TestEntry{-1082130432, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-1082130432, -1879048192, 268435456, 268435456, "n"},
    TestEntry{-1082130432, 32767, 0, 0, "n"},
    TestEntry{-1082130432, 32768, 0, 0, "n"},
    TestEntry{-1082130432, 127, 0, 0, "n"},
    TestEntry{-1082130432, 128, 0, 0, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, 1065353216, 1065353216, "n"},
    TestEntry{-1082130432, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{-1082130432, -268435456, 1879048192, 1879048192, "n"},
    TestEntry{1073741824, -2147483648, 0, 0, "n"},
    TestEntry{1073741824, 2147483647, 2139095040, 2139095040, "n"},
    TestEntry{1073741824, 0, 0, 0, "n"},
    TestEntry{1073741824, -1, -8388608, -8388608, "n"},
    TestEntry{1073741824, 1, 0, 0, "n"},
    TestEntry{1073741824, 1879048192, 1887436800, 1887436800, "n"},
    TestEntry{1073741824, -1879048192, -1870659584, -1870659584, "n"},
    TestEntry{1073741824, 32767, 0, 0, "n"},
    TestEntry{1073741824, 32768, 0, 0, "n"},
    TestEntry{1073741824, 127, 0, 0, "n"},
    TestEntry{1073741824, 128, 0, 0, "n"},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, -1082130432, -1073741824, -1073741824, "n"},
    TestEntry{1073741824, 1073741824, 1082130432, 1082130432, "n"},
    TestEntry{1073741824, -268435456, -260046848, -260046848, "n"},
    TestEntry{-268435456, -2147483648, 0, 0, "n"},
    TestEntry{-268435456, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-268435456, 0, 0, 0, "n"},
    TestEntry{-268435456, -1, 2139095040, 2139095040, "n"},
    TestEntry{-268435456, 1, 0, 0, "n"},
    TestEntry{-268435456, 1879048192, -8388608, -8388608, "n"},
    TestEntry{-268435456, -1879048192, 1082130432, 1082130432, "n"},
    TestEntry{-268435456, 32767, 0, 0, "n"},
    TestEntry{-268435456, 32768, 0, 0, "n"},
    TestEntry{-268435456, 127, 0, 0, "n"},
    TestEntry{-268435456, 128, 0, 0, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, 1879048192, 1879048192, "n"},
    TestEntry{-268435456, 1073741824, -260046848, -260046848, "n"},
    TestEntry{-268435456, -268435456, 2139095040, 2139095040, "n"},
};

static const std::vector<TestEntry> TEST_OP_FSUB = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{-2147483648, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-2147483648, 0, 0, 0, "z"},
    TestEntry{-2147483648, -1, 2139095040, 2139095040, "c"},
    TestEntry{-2147483648, 1, 0, 0, "z"},
    TestEntry{-2147483648, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-2147483648, -1879048192, 268435456, 268435456, "c"},
    TestEntry{-2147483648, 32767, 0, 0, "z"},
    TestEntry{-2147483648, 32768, 0, 0, "z"},
    TestEntry{-2147483648, 127, 0, 0, "z"},
    TestEntry{-2147483648, 128, 0, 0, "z"},
    TestEntry{-2147483648, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{-2147483648, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{-2147483648, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{2147483647, -2147483648, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 2147483647, -8388608, -8388608, "n"},
    TestEntry{2147483647, 0, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -1, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 1, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 1879048192, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -1879048192, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 32767, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 32768, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 127, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 128, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 1065353216, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -1082130432, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, 1073741824, 2139095040, 2139095040, "c"},
    TestEntry{2147483647, -268435456, 2139095040, 2139095040, "c"},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, -8388608, -8388608, "n"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 2139095040, 2139095040, "c"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, -268435456, -268435456, "n"},
    TestEntry{0, -1879048192, 268435456, 268435456, "c"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{0, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{0, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{0, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{-1, -2147483648, -8388608, -8388608, "n"},
    TestEntry{-1, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-1, 0, -8388608, -8388608, "n"},
    TestEntry{-1, -1, 2139095040, 2139095040, "c"},
    TestEntry{-1, 1, -8388608, -8388608, "n"},
    TestEntry{-1, 1879048192, -8388608, -8388608, "n"},
    TestEntry{-1, -1879048192, -8388608, -8388608, "n"},
    TestEntry{-1, 32767, -8388608, -8388608, "n"},
    TestEntry{-1, 32768, -8388608, -8388608, "n"},
    TestEntry{-1, 127, -8388608, -8388608, "n"},
    TestEntry{-1, 128, -8388608, -8388608, "n"},
    TestEntry{-1, 1065353216, -8388608, -8388608, "n"},
    TestEntry{-1, -1082130432, -8388608, -8388608, "n"},
    TestEntry{-1, 1073741824, -8388608, -8388608, "n"},
    TestEntry{-1, -268435456, -8388608, -8388608, "n"},
    TestEntry{1, -2147483648, 0, 0, "z"},
    TestEntry{1, 2147483647, -8388608, -8388608, "n"},
    TestEntry{1, 0, 0, 0, "z"},
    TestEntry{1, -1, 2139095040, 2139095040, "c"},
    TestEntry{1, 1, 0, 0, "z"},
    TestEntry{1, 1879048192, -268435456, -268435456, "n"},
    TestEntry{1, -1879048192, 268435456, 268435456, "c"},
    TestEntry{1, 32767, 0, 0, "z"},
    TestEntry{1, 32768, 0, 0, "z"},
    TestEntry{1, 127, 0, 0, "z"},
    TestEntry{1, 128, 0, 0, "z"},
    TestEntry{1, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{1, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{1, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{1, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 2147483647, -8388608, -8388608, "n"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1, 2139095040, 2139095040, "c"},
    TestEntry{1879048192, 1, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1879048192, 0, 0, "z"},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32767, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 127, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1065353216, 1879048191, 1879048191, "c"},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1073741824, 1879048191, 1879048191, "c"},
    TestEntry{1879048192, -268435456, 1887436800, 1887436800, "c"},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, 2139095040, 2139095040, "c"},
    TestEntry{-1879048192, 1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-1879048192, -1879048192, 0, 0, "z"},
    TestEntry{-1879048192, 32767, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1879048192, -1082130432, 1065353215, 1065353215, "c"},
    TestEntry{-1879048192, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{-1879048192, -268435456, 1879048191, 1879048191, "c"},
    TestEntry{32767, -2147483648, 0, 0, "z"},
    TestEntry{32767, 2147483647, -8388608, -8388608, "n"},
    TestEntry{32767, 0, 0, 0, "z"},
    TestEntry{32767, -1, 2139095040, 2139095040, "c"},
    TestEntry{32767, 1, 0, 0, "z"},
    TestEntry{32767, 1879048192, -268435456, -268435456, "n"},
    TestEntry{32767, -1879048192, 268435456, 268435456, "c"},
    TestEntry{32767, 32767, 0, 0, "z"},
    TestEntry{32767, 32768, 0, 0, "z"},
    TestEntry{32767, 127, 0, 0, "z"},
    TestEntry{32767, 128, 0, 0, "z"},
    TestEntry{32767, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{32767, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{32767, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{32767, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{32768, -2147483648, 0, 0, "z"},
    TestEntry{32768, 2147483647, -8388608, -8388608, "n"},
    TestEntry{32768, 0, 0, 0, "z"},
    TestEntry{32768, -1, 2139095040, 2139095040, "c"},
    TestEntry{32768, 1, 0, 0, "z"},
    TestEntry{32768, 1879048192, -268435456, -268435456, "n"},
    TestEntry{32768, -1879048192, 268435456, 268435456, "c"},
    TestEntry{32768, 32767, 0, 0, "z"},
    TestEntry{32768, 32768, 0, 0, "z"},
    TestEntry{32768, 127, 0, 0, "z"},
    TestEntry{32768, 128, 0, 0, "z"},
    TestEntry{32768, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{32768, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{32768, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{32768, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{127, -2147483648, 0, 0, "z"},
    TestEntry{127, 2147483647, -8388608, -8388608, "n"},
    TestEntry{127, 0, 0, 0, "z"},
    TestEntry{127, -1, 2139095040, 2139095040, "c"},
    TestEntry{127, 1, 0, 0, "z"},
    TestEntry{127, 1879048192, -268435456, -268435456, "n"},
    TestEntry{127, -1879048192, 268435456, 268435456, "c"},
    TestEntry{127, 32767, 0, 0, "z"},
    TestEntry{127, 32768, 0, 0, "z"},
    TestEntry{127, 127, 0, 0, "z"},
    TestEntry{127, 128, 0, 0, "z"},
    TestEntry{127, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{127, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{127, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{127, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{128, -2147483648, 0, 0, "z"},
    TestEntry{128, 2147483647, -8388608, -8388608, "n"},
    TestEntry{128, 0, 0, 0, "z"},
    TestEntry{128, -1, 2139095040, 2139095040, "c"},
    TestEntry{128, 1, 0, 0, "z"},
    TestEntry{128, 1879048192, -268435456, -268435456, "n"},
    TestEntry{128, -1879048192, 268435456, 268435456, "c"},
    TestEntry{128, 32767, 0, 0, "z"},
    TestEntry{128, 32768, 0, 0, "z"},
    TestEntry{128, 127, 0, 0, "z"},
    TestEntry{128, 128, 0, 0, "z"},
    TestEntry{128, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{128, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{128, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{128, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 2147483647, -8388608, -8388608, "n"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, -1, 2139095040, 2139095040, "c"},
    TestEntry{1065353216, 1, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1879048192, -268435457, -268435457, "n"},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32767, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 127, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1065353216, 0, 0, "z"},
    TestEntry{1065353216, -1082130432, 1073741824, 1073741824, "c"},
    TestEntry{1065353216, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, 2139095040, 2139095040, "c"},
    TestEntry{-1082130432, 1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-1082130432, -1879048192, -1082130433, -1082130433, "n"},
    TestEntry{-1082130432, 32767, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -1073741824, -1073741824, "n"},
    TestEntry{-1082130432, -1082130432, 0, 0, "z"},
    TestEntry{-1082130432, 1073741824, -1069547520, -1069547520, "n"},
    TestEntry{-1082130432, -268435456, 1879048191, 1879048191, "c"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 2147483647, -8388608, -8388608, "n"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1, 2139095040, 2139095040, "c"},
    TestEntry{1073741824, 1, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1879048192, -268435457, -268435457, "n"},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32767, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 127, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1073741824, -1082130432, 1077936128, 1077936128, "c"},
    TestEntry{1073741824, 1073741824, 0, 0, "z"},
    TestEntry{1073741824, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, 2139095040, 2139095040, "c"},
    TestEntry{-268435456, 1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1879048192, -260046848, -260046848, "n"},
    TestEntry{-268435456, -1879048192, -268435457, -268435457, "n"},
    TestEntry{-268435456, 32767, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, -268435456, -268435456, "n"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, -268435457, -268435457, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, 0, 0, "z"},
};

static const std::vector<TestEntry> TEST_OP_FTOI = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{2147483647, -2147483648, 0, 0, "z"},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{-1, -2147483648, 0, 0, "z"},
    TestEntry{1, -2147483648, 0, 0, "z"},
    TestEntry{1879048192, -2147483648, 0, 0, "z"},
    TestEntry{-1879048192, -2147483648, 0, 0, "z"},
    TestEntry{32767, -2147483648, 0, 0, "z"},
    TestEntry{32768, -2147483648, 0, 0, "z"},
    TestEntry{127, -2147483648, 0, 0, "z"},
    TestEntry{128, -2147483648, 0, 0, "z"},
    TestEntry{1065353216, -2147483648, 1, 1, ""},
    TestEntry{-1082130432, -2147483648, -1, -1, "n"},
    TestEntry{1073741824, -2147483648, 2, 2, ""},
    TestEntry{-268435456, -2147483648, 0, 0, "z"},
};

static const std::vector<TestEntry> TEST_OP_ADD = {
    TestEntry{-2147483648, -2147483648, 0, -2147483648, "cz"},
    TestEntry{-2147483648, 2147483647, -1, -1, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, 2147483647, -2147483648, "c"},
    TestEntry{-2147483648, 1, -2147483647, -2147483647, "n"},
    TestEntry{-2147483648, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-2147483648, -1879048192, 268435456, -2147483648, "c"},
    TestEntry{-2147483648, 32767, -2147450881, -2147450881, "n"},
    TestEntry{-2147483648, 32768, -2147450880, -2147450880, "n"},
    TestEntry{-2147483648, 127, -2147483521, -2147483521, "n"},
    TestEntry{-2147483648, 128, -2147483520, -2147483520, "n"},
    TestEntry{-2147483648, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, -1082130432, 1065353216, -2147483648, "c"},
    TestEntry{-2147483648, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{-2147483648, -268435456, 1879048192, -2147483648, "c"},
    TestEntry{2147483647, -2147483648, -1, -1, "n"},
    TestEntry{2147483647, 2147483647, -2, 2147483647, "n"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, 2147483646, 2147483646, "c"},
    TestEntry{2147483647, 1, -2147483648, 2147483647, "n"},
    TestEntry{2147483647, 1879048192, -268435457, 2147483647, "n"},
    TestEntry{2147483647, -1879048192, 268435455, 268435455, "c"},
    TestEntry{2147483647, 32767, -2147450882, 2147483647, "n"},
    TestEntry{2147483647, 32768, -2147450881, 2147483647, "n"},
    TestEntry{2147483647, 127, -2147483522, 2147483647, "n"},
    TestEntry{2147483647, 128, -2147483521, 2147483647, "n"},
    TestEntry{2147483647, 1065353216, -1082130433, 2147483647, "n"},
    TestEntry{2147483647, -1082130432, 1065353215, 1065353215, "c"},
    TestEntry{2147483647, 1073741824, -1073741825, 2147483647, "n"},
    TestEntry{2147483647, -268435456, 1879048191, 1879048191, "c"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, -1, -1, "n"},
    TestEntry{0, 1, 1, 1, ""},
    TestEntry{0, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{0, 32767, 32767, 32767, ""},
    TestEntry{0, 32768, 32768, 32768, ""},
    TestEntry{0, 127, 127, 127, ""},
    TestEntry{0, 128, 128, 128, ""},
    TestEntry{0, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{0, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1, -2147483648, 2147483647, -2147483648, "c"},
    TestEntry{-1, 2147483647, 2147483646, 2147483646, "c"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -2, -2, "nc"},
    TestEntry{-1, 1, 0, 0, "cz"},
    TestEntry{-1, 1879048192, 1879048191, 1879048191, "c"},
    TestEntry{-1, -1879048192, -1879048193, -1879048193, "nc"},
    TestEntry{-1, 32767, 32766, 32766, "c"},
    TestEntry{-1, 32768, 32767, 32767, "c"},
    TestEntry{-1, 127, 126, 126, "c"},
    TestEntry{-1, 128, 127, 127, "c"},
    TestEntry{-1, 1065353216, 1065353215, 1065353215, "c"},
    TestEntry{-1, -1082130432, -1082130433, -1082130433, "nc"},
    TestEntry{-1, 1073741824, 1073741823, 1073741823, "c"},
    TestEntry{-1, -268435456, -268435457, -268435457, "nc"},
    TestEntry{1, -2147483648, -2147483647, -2147483647, "n"},
    TestEntry{1, 2147483647, -2147483648, 2147483647, "n"},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, 0, 0, "cz"},
    TestEntry{1, 1, 2, 2, ""},
    TestEntry{1, 1879048192, 1879048193, 1879048193, ""},
    TestEntry{1, -1879048192, -1879048191, -1879048191, "n"},
    TestEntry{1, 32767, 32768, 32768, ""},
    TestEntry{1, 32768, 32769, 32769, ""},
    TestEntry{1, 127, 128, 128, ""},
    TestEntry{1, 128, 129, 129, ""},
    TestEntry{1, 1065353216, 1065353217, 1065353217, ""},
    TestEntry{1, -1082130432, -1082130431, -1082130431, "n"},
    TestEntry{1, 1073741824, 1073741825, 1073741825, ""},
    TestEntry{1, -268435456, -268435455, -268435455, "n"},
    TestEntry{1879048192, -2147483648, -268435456, -268435456, "n"},
    TestEntry{1879048192, 2147483647, -268435457, 2147483647, "n"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, 1879048191, 1879048191, "c"},
    TestEntry{1879048192, 1, 1879048193, 1879048193, ""},
    TestEntry{1879048192, 1879048192, -536870912, 2147483647, "n"},
    TestEntry{1879048192, -1879048192, 0, 0, "cz"},
    TestEntry{1879048192, 32767, 1879080959, 1879080959, ""},
    TestEntry{1879048192, 32768, 1879080960, 1879080960, ""},
    TestEntry{1879048192, 127, 1879048319, 1879048319, ""},
    TestEntry{1879048192, 128, 1879048320, 1879048320, ""},
    TestEntry{1879048192, 1065353216, -1350565888, 2147483647, "n"},
    TestEntry{1879048192, -1082130432, 796917760, 796917760, "c"},
    TestEntry{1879048192, 1073741824, -1342177280, 2147483647, "n"},
    TestEntry{1879048192, -268435456, 1610612736, 1610612736, "c"},
    TestEntry{-1879048192, -2147483648, 268435456, -2147483648, "c"},
    TestEntry{-1879048192, 2147483647, 268435455, 268435455, "c"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1879048193, -1879048193, "nc"},
    TestEntry{-1879048192, 1, -1879048191, -1879048191, "n"},
    TestEntry{-1879048192, 1879048192, 0, 0, "cz"},
    TestEntry{-1879048192, -1879048192, 536870912, -2147483648, "c"},
    TestEntry{-1879048192, 32767, -1879015425, -1879015425, "n"},
    TestEntry{-1879048192, 32768, -1879015424, -1879015424, "n"},
    TestEntry{-1879048192, 127, -1879048065, -1879048065, "n"},
    TestEntry{-1879048192, 128, -1879048064, -1879048064, "n"},
    TestEntry{-1879048192, 1065353216, -813694976, -813694976, "n"},
    TestEntry{-1879048192, -1082130432, 1333788672, -2147483648, "c"},
    TestEntry{-1879048192, 1073741824, -805306368, -805306368, "n"},
    TestEntry{-1879048192, -268435456, -2147483648, -2147483648, "nc"},
    TestEntry{32767, -2147483648, -2147450881, -2147450881, "n"},
    TestEntry{32767, 2147483647, -2147450882, 2147483647, "n"},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, 32766, 32766, "c"},
    TestEntry{32767, 1, 32768, 32768, ""},
    TestEntry{32767, 1879048192, 1879080959, 1879080959, ""},
    TestEntry{32767, -1879048192, -1879015425, -1879015425, "n"},
    TestEntry{32767, 32767, 65534, 65534, ""},
    TestEntry{32767, 32768, 65535, 65535, ""},
    TestEntry{32767, 127, 32894, 32894, ""},
    TestEntry{32767, 128, 32895, 32895, ""},
    TestEntry{32767, 1065353216, 1065385983, 1065385983, ""},
    TestEntry{32767, -1082130432, -1082097665, -1082097665, "n"},
    TestEntry{32767, 1073741824, 1073774591, 1073774591, ""},
    TestEntry{32767, -268435456, -268402689, -268402689, "n"},
    TestEntry{32768, -2147483648, -2147450880, -2147450880, "n"},
    TestEntry{32768, 2147483647, -2147450881, 2147483647, "n"},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, 32767, 32767, "c"},
    TestEntry{32768, 1, 32769, 32769, ""},
    TestEntry{32768, 1879048192, 1879080960, 1879080960, ""},
    TestEntry{32768, -1879048192, -1879015424, -1879015424, "n"},
    TestEntry{32768, 32767, 65535, 65535, ""},
    TestEntry{32768, 32768, 65536, 65536, ""},
    TestEntry{32768, 127, 32895, 32895, ""},
    TestEntry{32768, 128, 32896, 32896, ""},
    TestEntry{32768, 1065353216, 1065385984, 1065385984, ""},
    TestEntry{32768, -1082130432, -1082097664, -1082097664, "n"},
    TestEntry{32768, 1073741824, 1073774592, 1073774592, ""},
    TestEntry{32768, -268435456, -268402688, -268402688, "n"},
    TestEntry{127, -2147483648, -2147483521, -2147483521, "n"},
    TestEntry{127, 2147483647, -2147483522, 2147483647, "n"},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, 126, 126, "c"},
    TestEntry{127, 1, 128, 128, ""},
    TestEntry{127, 1879048192, 1879048319, 1879048319, ""},
    TestEntry{127, -1879048192, -1879048065, -1879048065, "n"},
    TestEntry{127, 32767, 32894, 32894, ""},
    TestEntry{127, 32768, 32895, 32895, ""},
    TestEntry{127, 127, 254, 254, ""},
    TestEntry{127, 128, 255, 255, ""},
    TestEntry{127, 1065353216, 1065353343, 1065353343, ""},
    TestEntry{127, -1082130432, -1082130305, -1082130305, "n"},
    TestEntry{127, 1073741824, 1073741951, 1073741951, ""},
    TestEntry{127, -268435456, -268435329, -268435329, "n"},
    TestEntry{128, -2147483648, -2147483520, -2147483520, "n"},
    TestEntry{128, 2147483647, -2147483521, 2147483647, "n"},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, 127, 127, "c"},
    TestEntry{128, 1, 129, 129, ""},
    TestEntry{128, 1879048192, 1879048320, 1879048320, ""},
    TestEntry{128, -1879048192, -1879048064, -1879048064, "n"},
    TestEntry{128, 32767, 32895, 32895, ""},
    TestEntry{128, 32768, 32896, 32896, ""},
    TestEntry{128, 127, 255, 255, ""},
    TestEntry{128, 128, 256, 256, ""},
    TestEntry{128, 1065353216, 1065353344, 1065353344, ""},
    TestEntry{128, -1082130432, -1082130304, -1082130304, "n"},
    TestEntry{128, 1073741824, 1073741952, 1073741952, ""},
    TestEntry{128, -268435456, -268435328, -268435328, "n"},
    TestEntry{1065353216, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 2147483647, -1082130433, 2147483647, "n"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, 1065353215, 1065353215, "c"},
    TestEntry{1065353216, 1, 1065353217, 1065353217, ""},
    TestEntry{1065353216, 1879048192, -1350565888, 2147483647, "n"},
    TestEntry{1065353216, -1879048192, -813694976, -813694976, "n"},
    TestEntry{1065353216, 32767, 1065385983, 1065385983, ""},
    TestEntry{1065353216, 32768, 1065385984, 1065385984, ""},
    TestEntry{1065353216, 127, 1065353343, 1065353343, ""},
    TestEntry{1065353216, 128, 1065353344, 1065353344, ""},
    TestEntry{1065353216, 1065353216, 2130706432, 2130706432, ""},
    TestEntry{1065353216, -1082130432, -16777216, -16777216, "n"},
    TestEntry{1065353216, 1073741824, 2139095040, 2139095040, ""},
    TestEntry{1065353216, -268435456, 796917760, 796917760, "c"},
    TestEntry{-1082130432, -2147483648, 1065353216, -2147483648, "c"},
    TestEntry{-1082130432, 2147483647, 1065353215, 1065353215, "c"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1082130433, -1082130433, "nc"},
    TestEntry{-1082130432, 1, -1082130431, -1082130431, "n"},
    TestEntry{-1082130432, 1879048192, 796917760, 796917760, "c"},
    TestEntry{-1082130432, -1879048192, 1333788672, -2147483648, "c"},
    TestEntry{-1082130432, 32767, -1082097665, -1082097665, "n"},
    TestEntry{-1082130432, 32768, -1082097664, -1082097664, "n"},
    TestEntry{-1082130432, 127, -1082130305, -1082130305, "n"},
    TestEntry{-1082130432, 128, -1082130304, -1082130304, "n"},
    TestEntry{-1082130432, 1065353216, -16777216, -16777216, "n"},
    TestEntry{-1082130432, -1082130432, 2130706432, -2147483648, "c"},
    TestEntry{-1082130432, 1073741824, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -268435456, -1350565888, -1350565888, "nc"},
    TestEntry{1073741824, -2147483648, -1073741824, -1073741824, "n"},
    TestEntry{1073741824, 2147483647, -1073741825, 2147483647, "n"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, 1073741823, 1073741823, "c"},
    TestEntry{1073741824, 1, 1073741825, 1073741825, ""},
    TestEntry{1073741824, 1879048192, -1342177280, 2147483647, "n"},
    TestEntry{1073741824, -1879048192, -805306368, -805306368, "n"},
    TestEntry{1073741824, 32767, 1073774591, 1073774591, ""},
    TestEntry{1073741824, 32768, 1073774592, 1073774592, ""},
    TestEntry{1073741824, 127, 1073741951, 1073741951, ""},
    TestEntry{1073741824, 128, 1073741952, 1073741952, ""},
    TestEntry{1073741824, 1065353216, 2139095040, 2139095040, ""},
    TestEntry{1073741824, -1082130432, -8388608, -8388608, "n"},
    TestEntry{1073741824, 1073741824, -2147483648, 2147483647, "n"},
    TestEntry{1073741824, -268435456, 805306368, 805306368, "c"},
    TestEntry{-268435456, -2147483648, 1879048192, -2147483648, "c"},
    TestEntry{-268435456, 2147483647, 1879048191, 1879048191, "c"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -268435457, -268435457, "nc"},
    TestEntry{-268435456, 1, -268435455, -268435455, "n"},
    TestEntry{-268435456, 1879048192, 1610612736, 1610612736, "c"},
    TestEntry{-268435456, -1879048192, -2147483648, -2147483648, "nc"},
    TestEntry{-268435456, 32767, -268402689, -268402689, "n"},
    TestEntry{-268435456, 32768, -268402688, -268402688, "n"},
    TestEntry{-268435456, 127, -268435329, -268435329, "n"},
    TestEntry{-268435456, 128, -268435328, -268435328, "n"},
    TestEntry{-268435456, 1065353216, 796917760, 796917760, "c"},
    TestEntry{-268435456, -1082130432, -1350565888, -1350565888, "nc"},
    TestEntry{-268435456, 1073741824, 805306368, 805306368, "c"},
    TestEntry{-268435456, -268435456, -536870912, -536870912, "nc"},
};

static const std::vector<TestEntry> TEST_OP_MAX = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-2147483648, 0, 0, 0, "z"},
    TestEntry{-2147483648, -1, -1, -1, "n"},
    TestEntry{-2147483648, 1, 1, 1, ""},
    TestEntry{-2147483648, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-2147483648, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-2147483648, 32767, 32767, 32767, ""},
    TestEntry{-2147483648, 32768, 32768, 32768, ""},
    TestEntry{-2147483648, 127, 127, 127, ""},
    TestEntry{-2147483648, 128, 128, 128, ""},
    TestEntry{-2147483648, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-2147483648, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-2147483648, -268435456, -268435456, -268435456, "n"},
    TestEntry{2147483647, -2147483648, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1879048192, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 32767, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 127, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -1082130432, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, "c"},
    TestEntry{2147483647, -268435456, 2147483647, 2147483647, "c"},
    TestEntry{0, -2147483648, 0, 0, "cz"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "cz"},
    TestEntry{0, 1, 1, 1, ""},
    TestEntry{0, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{0, -1879048192, 0, 0, "cz"},
    TestEntry{0, 32767, 32767, 32767, ""},
    TestEntry{0, 32768, 32768, 32768, ""},
    TestEntry{0, 127, 127, 127, ""},
    TestEntry{0, 128, 128, 128, ""},
    TestEntry{0, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{0, -1082130432, 0, 0, "cz"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{0, -268435456, 0, 0, "cz"},
    TestEntry{-1, -2147483648, -1, -1, "nc"},
    TestEntry{-1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1, 0, 0, 0, "z"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, 1, 1, ""},
    TestEntry{-1, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1, -1879048192, -1, -1, "nc"},
    TestEntry{-1, 32767, 32767, 32767, ""},
    TestEntry{-1, 32768, 32768, 32768, ""},
    TestEntry{-1, 127, 127, 127, ""},
    TestEntry{-1, 128, 128, 128, ""},
    TestEntry{-1, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1, -1082130432, -1, -1, "nc"},
    TestEntry{-1, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1, -268435456, -1, -1, "nc"},
    TestEntry{1, -2147483648, 1, 1, "c"},
    TestEntry{1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1, 0, 1, 1, "c"},
    TestEntry{1, -1, 1, 1, "c"},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1, -1879048192, 1, 1, "c"},
    TestEntry{1, 32767, 32767, 32767, ""},
    TestEntry{1, 32768, 32768, 32768, ""},
    TestEntry{1, 127, 127, 127, ""},
    TestEntry{1, 128, 128, 128, ""},
    TestEntry{1, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1, -1082130432, 1, 1, "c"},
    TestEntry{1, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1, -268435456, 1, 1, "c"},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1879048192, 0, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32767, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 127, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, "c"},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, "c"},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "nc"},
    TestEntry{-1879048192, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1879048192, 0, 0, 0, "z"},
    TestEntry{-1879048192, -1, -1, -1, "n"},
    TestEntry{-1879048192, 1, 1, 1, ""},
    TestEntry{-1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, 32767, 32767, ""},
    TestEntry{-1879048192, 32768, 32768, 32768, ""},
    TestEntry{-1879048192, 127, 127, 127, ""},
    TestEntry{-1879048192, 128, 128, 128, ""},
    TestEntry{-1879048192, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1879048192, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1879048192, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1879048192, -268435456, -268435456, -268435456, "n"},
    TestEntry{32767, -2147483648, 32767, 32767, "c"},
    TestEntry{32767, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32767, 0, 32767, 32767, "c"},
    TestEntry{32767, -1, 32767, 32767, "c"},
    TestEntry{32767, 1, 32767, 32767, "c"},
    TestEntry{32767, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{32767, -1879048192, 32767, 32767, "c"},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 32768, 32768, ""},
    TestEntry{32767, 127, 32767, 32767, "c"},
    TestEntry{32767, 128, 32767, 32767, "c"},
    TestEntry{32767, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{32767, -1082130432, 32767, 32767, "c"},
    TestEntry{32767, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{32767, -268435456, 32767, 32767, "c"},
    TestEntry{32768, -2147483648, 32768, 32768, "c"},
    TestEntry{32768, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32768, 0, 32768, 32768, "c"},
    TestEntry{32768, -1, 32768, 32768, "c"},
    TestEntry{32768, 1, 32768, 32768, "c"},
    TestEntry{32768, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{32768, -1879048192, 32768, 32768, "c"},
    TestEntry{32768, 32767, 32768, 32768, "c"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 32768, 32768, "c"},
    TestEntry{32768, 128, 32768, 32768, "c"},
    TestEntry{32768, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{32768, -1082130432, 32768, 32768, "c"},
    TestEntry{32768, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{32768, -268435456, 32768, 32768, "c"},
    TestEntry{127, -2147483648, 127, 127, "c"},
    TestEntry{127, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{127, 0, 127, 127, "c"},
    TestEntry{127, -1, 127, 127, "c"},
    TestEntry{127, 1, 127, 127, "c"},
    TestEntry{127, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{127, -1879048192, 127, 127, "c"},
    TestEntry{127, 32767, 32767, 32767, ""},
    TestEntry{127, 32768, 32768, 32768, ""},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 128, 128, ""},
    TestEntry{127, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{127, -1082130432, 127, 127, "c"},
    TestEntry{127, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{127, -268435456, 127, 127, "c"},
    TestEntry{128, -2147483648, 128, 128, "c"},
    TestEntry{128, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{128, 0, 128, 128, "c"},
    TestEntry{128, -1, 128, 128, "c"},
    TestEntry{128, 1, 128, 128, "c"},
    TestEntry{128, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{128, -1879048192, 128, 128, "c"},
    TestEntry{128, 32767, 32767, 32767, ""},
    TestEntry{128, 32768, 32768, 32768, ""},
    TestEntry{128, 127, 128, 128, "c"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{128, -1082130432, 128, 128, "c"},
    TestEntry{128, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{128, -268435456, 128, 128, "c"},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1065353216, 0, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, -1, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32767, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 127, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, "c"},
    TestEntry{1065353216, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1065353216, -268435456, 1065353216, 1065353216, "c"},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "nc"},
    TestEntry{-1082130432, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-1082130432, 0, 0, 0, "z"},
    TestEntry{-1082130432, -1, -1, -1, "n"},
    TestEntry{-1082130432, 1, 1, 1, ""},
    TestEntry{-1082130432, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "nc"},
    TestEntry{-1082130432, 32767, 32767, 32767, ""},
    TestEntry{-1082130432, 32768, 32768, 32768, ""},
    TestEntry{-1082130432, 127, 127, 127, ""},
    TestEntry{-1082130432, 128, 128, 128, ""},
    TestEntry{-1082130432, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-1082130432, -268435456, -268435456, -268435456, "n"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1073741824, 0, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32767, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 127, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, "c"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, "c"},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "nc"},
    TestEntry{-268435456, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{-268435456, 0, 0, 0, "z"},
    TestEntry{-268435456, -1, -1, -1, "n"},
    TestEntry{-268435456, 1, 1, 1, ""},
    TestEntry{-268435456, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "nc"},
    TestEntry{-268435456, 32767, 32767, 32767, ""},
    TestEntry{-268435456, 32768, 32768, 32768, ""},
    TestEntry{-268435456, 127, 127, 127, ""},
    TestEntry{-268435456, 128, 128, 128, ""},
    TestEntry{-268435456, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{-268435456, -1082130432, -268435456, -268435456, "nc"},
    TestEntry{-268435456, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_MIN = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32767, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32768, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 127, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 128, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 0, 0, 0, "cz"},
    TestEntry{2147483647, -1, -1, -1, "nc"},
    TestEntry{2147483647, 1, 1, 1, "c"},
    TestEntry{2147483647, 1879048192, 1879048192, 1879048192, "c"},
    TestEntry{2147483647, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{2147483647, 32767, 32767, 32767, "c"},
    TestEntry{2147483647, 32768, 32768, 32768, "c"},
    TestEntry{2147483647, 127, 127, 127, "c"},
    TestEntry{2147483647, 128, 128, 128, "c"},
    TestEntry{2147483647, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{2147483647, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{2147483647, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{2147483647, -268435456, -268435456, -268435456, "nc"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, -1, -1, "nc"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-1, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{-1, 2147483647, -1, -1, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, -1, -1, "n"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{-1, 32767, -1, -1, "n"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -1, -1, "n"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -268435456, -268435456, "nc"},
    TestEntry{1, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1, 2147483647, 1, 1, ""},
    TestEntry{1, 0, 0, 0, "cz"},
    TestEntry{1, -1, -1, -1, "nc"},
    TestEntry{1, 1, 1, 1, ""},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1, 32767, 1, 1, ""},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, 1, 1, ""},
    TestEntry{1, 128, 1, 1, ""},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, -268435456, -268435456, "nc"},
    TestEntry{1879048192, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1879048192, 2147483647, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 0, 0, 0, "cz"},
    TestEntry{1879048192, -1, -1, -1, "nc"},
    TestEntry{1879048192, 1, 1, 1, "c"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1879048192, 32767, 32767, 32767, "c"},
    TestEntry{1879048192, 32768, 32768, 32768, "c"},
    TestEntry{1879048192, 127, 127, 127, "c"},
    TestEntry{1879048192, 128, 128, 128, "c"},
    TestEntry{1879048192, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1879048192, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1879048192, 1073741824, 1073741824, 1073741824, "c"},
    TestEntry{1879048192, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-1879048192, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{-1879048192, 2147483647, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1073741824, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "n"},
    TestEntry{32767, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{32767, 2147483647, 32767, 32767, ""},
    TestEntry{32767, 0, 0, 0, "cz"},
    TestEntry{32767, -1, -1, -1, "nc"},
    TestEntry{32767, 1, 1, 1, "c"},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{32767, 32767, 32767, 32767, ""},
    TestEntry{32767, 32768, 32767, 32767, ""},
    TestEntry{32767, 127, 127, 127, "c"},
    TestEntry{32767, 128, 128, 128, "c"},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, -268435456, -268435456, "nc"},
    TestEntry{32768, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{32768, 2147483647, 32768, 32768, ""},
    TestEntry{32768, 0, 0, 0, "cz"},
    TestEntry{32768, -1, -1, -1, "nc"},
    TestEntry{32768, 1, 1, 1, "c"},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{32768, 32767, 32767, 32767, "c"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 127, 127, "c"},
    TestEntry{32768, 128, 128, 128, "c"},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, -268435456, -268435456, "nc"},
    TestEntry{127, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{127, 2147483647, 127, 127, ""},
    TestEntry{127, 0, 0, 0, "cz"},
    TestEntry{127, -1, -1, -1, "nc"},
    TestEntry{127, 1, 1, 1, "c"},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{127, 32767, 127, 127, ""},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, 127, 127, ""},
    TestEntry{127, 128, 127, 127, ""},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, -268435456, -268435456, "nc"},
    TestEntry{128, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{128, 2147483647, 128, 128, ""},
    TestEntry{128, 0, 0, 0, "cz"},
    TestEntry{128, -1, -1, -1, "nc"},
    TestEntry{128, 1, 1, 1, "c"},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{128, 32767, 128, 128, ""},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 127, 127, "c"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, -268435456, -268435456, "nc"},
    TestEntry{1065353216, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1065353216, 2147483647, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 0, 0, 0, "cz"},
    TestEntry{1065353216, -1, -1, -1, "nc"},
    TestEntry{1065353216, 1, 1, 1, "c"},
    TestEntry{1065353216, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1065353216, 32767, 32767, 32767, "c"},
    TestEntry{1065353216, 32768, 32768, 32768, "c"},
    TestEntry{1065353216, 127, 127, 127, "c"},
    TestEntry{1065353216, 128, 128, 128, "c"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1065353216, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-1082130432, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{-1082130432, 2147483647, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{-1082130432, 32767, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -268435456, -1082130432, -1082130432, "n"},
    TestEntry{1073741824, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{1073741824, 2147483647, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 0, 0, 0, "cz"},
    TestEntry{1073741824, -1, -1, -1, "nc"},
    TestEntry{1073741824, 1, 1, 1, "c"},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{1073741824, 32767, 32767, 32767, "c"},
    TestEntry{1073741824, 32768, 32768, 32768, "c"},
    TestEntry{1073741824, 127, 127, 127, "c"},
    TestEntry{1073741824, 128, 128, 128, "c"},
    TestEntry{1073741824, 1065353216, 1065353216, 1065353216, "c"},
    TestEntry{1073741824, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, -268435456, -268435456, "nc"},
    TestEntry{-268435456, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{-268435456, 2147483647, -268435456, -268435456, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{-268435456, 32767, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, -268435456, -268435456, "n"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, -1082130432, -1082130432, "nc"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_MUL24 = {
    TestEntry{-2147483648, -2147483648, 0, 0, "n"},
    TestEntry{-2147483648, 2147483647, 0, 0, "n"},
    TestEntry{-2147483648, 0, 0, 0, "n"},
    TestEntry{-2147483648, -1, 0, 0, "n"},
    TestEntry{-2147483648, 1, 0, 0, "n"},
    TestEntry{-2147483648, 1879048192, 0, 0, "n"},
    TestEntry{-2147483648, -1879048192, 0, 0, "n"},
    TestEntry{-2147483648, 32767, 0, 0, "n"},
    TestEntry{-2147483648, 32768, 0, 0, "n"},
    TestEntry{-2147483648, 127, 0, 0, "n"},
    TestEntry{-2147483648, 128, 0, 0, "n"},
    TestEntry{-2147483648, 1065353216, 0, 0, "n"},
    TestEntry{-2147483648, -1082130432, 0, 0, "n"},
    TestEntry{-2147483648, 1073741824, 0, 0, "n"},
    TestEntry{-2147483648, -268435456, 0, 0, "n"},
    TestEntry{2147483647, -2147483648, 0, 0, "n"},
    TestEntry{2147483647, 2147483647, -33554431, -33554431, "n"},
    TestEntry{2147483647, 0, 0, 0, "n"},
    TestEntry{2147483647, -1, -33554431, -33554431, "n"},
    TestEntry{2147483647, 1, 16777215, 16777215, "n"},
    TestEntry{2147483647, 1879048192, 0, 0, "n"},
    TestEntry{2147483647, -1879048192, 0, 0, "n"},
    TestEntry{2147483647, 32767, -16809983, -16809983, "n"},
    TestEntry{2147483647, 32768, -32768, -32768, "n"},
    TestEntry{2147483647, 127, 2130706305, 2130706305, "n"},
    TestEntry{2147483647, 128, 2147483520, 2147483520, "n"},
    TestEntry{2147483647, 1065353216, -8388608, -8388608, "n"},
    TestEntry{2147483647, -1082130432, -8388608, -8388608, "n"},
    TestEntry{2147483647, 1073741824, 0, 0, "n"},
    TestEntry{2147483647, -268435456, 0, 0, "n"},
    TestEntry{0, -2147483648, 0, 0, "n"},
    TestEntry{0, 2147483647, 0, 0, "n"},
    TestEntry{0, 0, 0, 0, "n"},
    TestEntry{0, -1, 0, 0, "n"},
    TestEntry{0, 1, 0, 0, "n"},
    TestEntry{0, 1879048192, 0, 0, "n"},
    TestEntry{0, -1879048192, 0, 0, "n"},
    TestEntry{0, 32767, 0, 0, "n"},
    TestEntry{0, 32768, 0, 0, "n"},
    TestEntry{0, 127, 0, 0, "n"},
    TestEntry{0, 128, 0, 0, "n"},
    TestEntry{0, 1065353216, 0, 0, "n"},
    TestEntry{0, -1082130432, 0, 0, "n"},
    TestEntry{0, 1073741824, 0, 0, "n"},
    TestEntry{0, -268435456, 0, 0, "n"},
    TestEntry{-1, -2147483648, 0, 0, "n"},
    TestEntry{-1, 2147483647, -33554431, -33554431, "n"},
    TestEntry{-1, 0, 0, 0, "n"},
    TestEntry{-1, -1, -33554431, -33554431, "n"},
    TestEntry{-1, 1, 16777215, 16777215, "n"},
    TestEntry{-1, 1879048192, 0, 0, "n"},
    TestEntry{-1, -1879048192, 0, 0, "n"},
    TestEntry{-1, 32767, -16809983, -16809983, "n"},
    TestEntry{-1, 32768, -32768, -32768, "n"},
    TestEntry{-1, 127, 2130706305, 2130706305, "n"},
    TestEntry{-1, 128, 2147483520, 2147483520, "n"},
    TestEntry{-1, 1065353216, -8388608, -8388608, "n"},
    TestEntry{-1, -1082130432, -8388608, -8388608, "n"},
    TestEntry{-1, 1073741824, 0, 0, "n"},
    TestEntry{-1, -268435456, 0, 0, "n"},
    TestEntry{1, -2147483648, 0, 0, "n"},
    TestEntry{1, 2147483647, 16777215, 16777215, "n"},
    TestEntry{1, 0, 0, 0, "n"},
    TestEntry{1, -1, 16777215, 16777215, "n"},
    TestEntry{1, 1, 1, 1, "n"},
    TestEntry{1, 1879048192, 0, 0, "n"},
    TestEntry{1, -1879048192, 0, 0, "n"},
    TestEntry{1, 32767, 32767, 32767, "n"},
    TestEntry{1, 32768, 32768, 32768, "n"},
    TestEntry{1, 127, 127, 127, "n"},
    TestEntry{1, 128, 128, 128, "n"},
    TestEntry{1, 1065353216, 8388608, 8388608, "n"},
    TestEntry{1, -1082130432, 8388608, 8388608, "n"},
    TestEntry{1, 1073741824, 0, 0, "n"},
    TestEntry{1, -268435456, 0, 0, "n"},
    TestEntry{1879048192, -2147483648, 0, 0, "n"},
    TestEntry{1879048192, 2147483647, 0, 0, "n"},
    TestEntry{1879048192, 0, 0, 0, "n"},
    TestEntry{1879048192, -1, 0, 0, "n"},
    TestEntry{1879048192, 1, 0, 0, "n"},
    TestEntry{1879048192, 1879048192, 0, 0, "n"},
    TestEntry{1879048192, -1879048192, 0, 0, "n"},
    TestEntry{1879048192, 32767, 0, 0, "n"},
    TestEntry{1879048192, 32768, 0, 0, "n"},
    TestEntry{1879048192, 127, 0, 0, "n"},
    TestEntry{1879048192, 128, 0, 0, "n"},
    TestEntry{1879048192, 1065353216, 0, 0, "n"},
    TestEntry{1879048192, -1082130432, 0, 0, "n"},
    TestEntry{1879048192, 1073741824, 0, 0, "n"},
    TestEntry{1879048192, -268435456, 0, 0, "n"},
    TestEntry{-1879048192, -2147483648, 0, 0, "n"},
    TestEntry{-1879048192, 2147483647, 0, 0, "n"},
    TestEntry{-1879048192, 0, 0, 0, "n"},
    TestEntry{-1879048192, -1, 0, 0, "n"},
    TestEntry{-1879048192, 1, 0, 0, "n"},
    TestEntry{-1879048192, 1879048192, 0, 0, "n"},
    TestEntry{-1879048192, -1879048192, 0, 0, "n"},
    TestEntry{-1879048192, 32767, 0, 0, "n"},
    TestEntry{-1879048192, 32768, 0, 0, "n"},
    TestEntry{-1879048192, 127, 0, 0, "n"},
    TestEntry{-1879048192, 128, 0, 0, "n"},
    TestEntry{-1879048192, 1065353216, 0, 0, "n"},
    TestEntry{-1879048192, -1082130432, 0, 0, "n"},
    TestEntry{-1879048192, 1073741824, 0, 0, "n"},
    TestEntry{-1879048192, -268435456, 0, 0, "n"},
    TestEntry{32767, -2147483648, 0, 0, "n"},
    TestEntry{32767, 2147483647, -16809983, -16809983, "n"},
    TestEntry{32767, 0, 0, 0, "n"},
    TestEntry{32767, -1, -16809983, -16809983, "n"},
    TestEntry{32767, 1, 32767, 32767, "n"},
    TestEntry{32767, 1879048192, 0, 0, "n"},
    TestEntry{32767, -1879048192, 0, 0, "n"},
    TestEntry{32767, 32767, 1073676289, 1073676289, "n"},
    TestEntry{32767, 32768, 1073709056, 1073709056, "n"},
    TestEntry{32767, 127, 4161409, 4161409, "n"},
    TestEntry{32767, 128, 4194176, 4194176, "n"},
    TestEntry{32767, 1065353216, -8388608, -8388608, "n"},
    TestEntry{32767, -1082130432, -8388608, -8388608, "n"},
    TestEntry{32767, 1073741824, 0, 0, "n"},
    TestEntry{32767, -268435456, 0, 0, "n"},
    TestEntry{32768, -2147483648, 0, 0, "n"},
    TestEntry{32768, 2147483647, -32768, -32768, "n"},
    TestEntry{32768, 0, 0, 0, "n"},
    TestEntry{32768, -1, -32768, -32768, "n"},
    TestEntry{32768, 1, 32768, 32768, "n"},
    TestEntry{32768, 1879048192, 0, 0, "n"},
    TestEntry{32768, -1879048192, 0, 0, "n"},
    TestEntry{32768, 32767, 1073709056, 1073709056, "n"},
    TestEntry{32768, 32768, 1073741824, 1073741824, "n"},
    TestEntry{32768, 127, 4161536, 4161536, "n"},
    TestEntry{32768, 128, 4194304, 4194304, "n"},
    TestEntry{32768, 1065353216, 0, 0, "n"},
    TestEntry{32768, -1082130432, 0, 0, "n"},
    TestEntry{32768, 1073741824, 0, 0, "n"},
    TestEntry{32768, -268435456, 0, 0, "n"},
    TestEntry{127, -2147483648, 0, 0, "n"},
    TestEntry{127, 2147483647, 2130706305, 2130706305, "n"},
    TestEntry{127, 0, 0, 0, "n"},
    TestEntry{127, -1, 2130706305, 2130706305, "n"},
    TestEntry{127, 1, 127, 127, "n"},
    TestEntry{127, 1879048192, 0, 0, "n"},
    TestEntry{127, -1879048192, 0, 0, "n"},
    TestEntry{127, 32767, 4161409, 4161409, "n"},
    TestEntry{127, 32768, 4161536, 4161536, "n"},
    TestEntry{127, 127, 16129, 16129, "n"},
    TestEntry{127, 128, 16256, 16256, "n"},
    TestEntry{127, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{127, -1082130432, 1065353216, 1065353216, "n"},
    TestEntry{127, 1073741824, 0, 0, "n"},
    TestEntry{127, -268435456, 0, 0, "n"},
    TestEntry{128, -2147483648, 0, 0, "n"},
    TestEntry{128, 2147483647, 2147483520, 2147483520, "n"},
    TestEntry{128, 0, 0, 0, "n"},
    TestEntry{128, -1, 2147483520, 2147483520, "n"},
    TestEntry{128, 1, 128, 128, "n"},
    TestEntry{128, 1879048192, 0, 0, "n"},
    TestEntry{128, -1879048192, 0, 0, "n"},
    TestEntry{128, 32767, 4194176, 4194176, "n"},
    TestEntry{128, 32768, 4194304, 4194304, "n"},
    TestEntry{128, 127, 16256, 16256, "n"},
    TestEntry{128, 128, 16384, 16384, "n"},
    TestEntry{128, 1065353216, 1073741824, 1073741824, "n"},
    TestEntry{128, -1082130432, 1073741824, 1073741824, "n"},
    TestEntry{128, 1073741824, 0, 0, "n"},
    TestEntry{128, -268435456, 0, 0, "n"},
    TestEntry{1065353216, -2147483648, 0, 0, "n"},
    TestEntry{1065353216, 2147483647, -8388608, -8388608, "n"},
    TestEntry{1065353216, 0, 0, 0, "n"},
    TestEntry{1065353216, -1, -8388608, -8388608, "n"},
    TestEntry{1065353216, 1, 8388608, 8388608, "n"},
    TestEntry{1065353216, 1879048192, 0, 0, "n"},
    TestEntry{1065353216, -1879048192, 0, 0, "n"},
    TestEntry{1065353216, 32767, -8388608, -8388608, "n"},
    TestEntry{1065353216, 32768, 0, 0, "n"},
    TestEntry{1065353216, 127, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, 128, 1073741824, 1073741824, "n"},
    TestEntry{1065353216, 1065353216, 0, 0, "n"},
    TestEntry{1065353216, -1082130432, 0, 0, "n"},
    TestEntry{1065353216, 1073741824, 0, 0, "n"},
    TestEntry{1065353216, -268435456, 0, 0, "n"},
    TestEntry{-1082130432, -2147483648, 0, 0, "n"},
    TestEntry{-1082130432, 2147483647, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 0, 0, 0, "n"},
    TestEntry{-1082130432, -1, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 1, 8388608, 8388608, "n"},
    TestEntry{-1082130432, 1879048192, 0, 0, "n"},
    TestEntry{-1082130432, -1879048192, 0, 0, "n"},
    TestEntry{-1082130432, 32767, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 32768, 0, 0, "n"},
    TestEntry{-1082130432, 127, 1065353216, 1065353216, "n"},
    TestEntry{-1082130432, 128, 1073741824, 1073741824, "n"},
    TestEntry{-1082130432, 1065353216, 0, 0, "n"},
    TestEntry{-1082130432, -1082130432, 0, 0, "n"},
    TestEntry{-1082130432, 1073741824, 0, 0, "n"},
    TestEntry{-1082130432, -268435456, 0, 0, "n"},
    TestEntry{1073741824, -2147483648, 0, 0, "n"},
    TestEntry{1073741824, 2147483647, 0, 0, "n"},
    TestEntry{1073741824, 0, 0, 0, "n"},
    TestEntry{1073741824, -1, 0, 0, "n"},
    TestEntry{1073741824, 1, 0, 0, "n"},
    TestEntry{1073741824, 1879048192, 0, 0, "n"},
    TestEntry{1073741824, -1879048192, 0, 0, "n"},
    TestEntry{1073741824, 32767, 0, 0, "n"},
    TestEntry{1073741824, 32768, 0, 0, "n"},
    TestEntry{1073741824, 127, 0, 0, "n"},
    TestEntry{1073741824, 128, 0, 0, "n"},
    TestEntry{1073741824, 1065353216, 0, 0, "n"},
    TestEntry{1073741824, -1082130432, 0, 0, "n"},
    TestEntry{1073741824, 1073741824, 0, 0, "n"},
    TestEntry{1073741824, -268435456, 0, 0, "n"},
    TestEntry{-268435456, -2147483648, 0, 0, "n"},
    TestEntry{-268435456, 2147483647, 0, 0, "n"},
    TestEntry{-268435456, 0, 0, 0, "n"},
    TestEntry{-268435456, -1, 0, 0, "n"},
    TestEntry{-268435456, 1, 0, 0, "n"},
    TestEntry{-268435456, 1879048192, 0, 0, "n"},
    TestEntry{-268435456, -1879048192, 0, 0, "n"},
    TestEntry{-268435456, 32767, 0, 0, "n"},
    TestEntry{-268435456, 32768, 0, 0, "n"},
    TestEntry{-268435456, 127, 0, 0, "n"},
    TestEntry{-268435456, 128, 0, 0, "n"},
    TestEntry{-268435456, 1065353216, 0, 0, "n"},
    TestEntry{-268435456, -1082130432, 0, 0, "n"},
    TestEntry{-268435456, 1073741824, 0, 0, "n"},
    TestEntry{-268435456, -268435456, 0, 0, "n"},
};

static const std::vector<TestEntry> TEST_OP_SUB = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{-2147483648, 2147483647, 1, 2147483647, ""},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, -2147483647, -2147483647, "nc"},
    TestEntry{-2147483648, 1, 2147483647, 2147483647, ""},
    TestEntry{-2147483648, 1879048192, 268435456, 2147483647, ""},
    TestEntry{-2147483648, -1879048192, -268435456, -268435456, "nc"},
    TestEntry{-2147483648, 32767, 2147450881, 2147483647, ""},
    TestEntry{-2147483648, 32768, 2147450880, 2147483647, ""},
    TestEntry{-2147483648, 127, 2147483521, 2147483647, ""},
    TestEntry{-2147483648, 128, 2147483520, 2147483647, ""},
    TestEntry{-2147483648, 1065353216, 1082130432, 2147483647, ""},
    TestEntry{-2147483648, -1082130432, -1065353216, -1065353216, "nc"},
    TestEntry{-2147483648, 1073741824, 1073741824, 2147483647, ""},
    TestEntry{-2147483648, -268435456, -1879048192, -1879048192, "nc"},
    TestEntry{2147483647, -2147483648, -1, -2147483648, "nc"},
    TestEntry{2147483647, 2147483647, 0, 0, "z"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, 1, 2147483646, 2147483646, ""},
    TestEntry{2147483647, 1879048192, 268435455, 268435455, ""},
    TestEntry{2147483647, -1879048192, -268435457, -2147483648, "nc"},
    TestEntry{2147483647, 32767, 2147450880, 2147450880, ""},
    TestEntry{2147483647, 32768, 2147450879, 2147450879, ""},
    TestEntry{2147483647, 127, 2147483520, 2147483520, ""},
    TestEntry{2147483647, 128, 2147483519, 2147483519, ""},
    TestEntry{2147483647, 1065353216, 1082130431, 1082130431, ""},
    TestEntry{2147483647, -1082130432, -1065353217, -2147483648, "nc"},
    TestEntry{2147483647, 1073741824, 1073741823, 1073741823, ""},
    TestEntry{2147483647, -268435456, -1879048193, -2147483648, "nc"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "nc"},
    TestEntry{0, 2147483647, -2147483647, -2147483647, "nc"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 1, 1, "c"},
    TestEntry{0, 1, -1, -1, "nc"},
    TestEntry{0, 1879048192, -1879048192, -1879048192, "nc"},
    TestEntry{0, -1879048192, 1879048192, 1879048192, "c"},
    TestEntry{0, 32767, -32767, -32767, "nc"},
    TestEntry{0, 32768, -32768, -32768, "nc"},
    TestEntry{0, 127, -127, -127, "nc"},
    TestEntry{0, 128, -128, -128, "nc"},
    TestEntry{0, 1065353216, -1065353216, -1065353216, "nc"},
    TestEntry{0, -1082130432, 1082130432, 1082130432, "c"},
    TestEntry{0, 1073741824, -1073741824, -1073741824, "nc"},
    TestEntry{0, -268435456, 268435456, 268435456, "c"},
    TestEntry{-1, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{-1, 2147483647, -2147483648, -2147483648, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, 0, 0, "z"},
    TestEntry{-1, 1, -2, -2, "n"},
    TestEntry{-1, 1879048192, -1879048193, -1879048193, "n"},
    TestEntry{-1, -1879048192, 1879048191, 1879048191, ""},
    TestEntry{-1, 32767, -32768, -32768, "n"},
    TestEntry{-1, 32768, -32769, -32769, "n"},
    TestEntry{-1, 127, -128, -128, "n"},
    TestEntry{-1, 128, -129, -129, "n"},
    TestEntry{-1, 1065353216, -1065353217, -1065353217, "n"},
    TestEntry{-1, -1082130432, 1082130431, 1082130431, ""},
    TestEntry{-1, 1073741824, -1073741825, -1073741825, "n"},
    TestEntry{-1, -268435456, 268435455, 268435455, ""},
    TestEntry{1, -2147483648, -2147483647, -2147483648, "nc"},
    TestEntry{1, 2147483647, -2147483646, -2147483646, "nc"},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, 2, 2, "c"},
    TestEntry{1, 1, 0, 0, "z"},
    TestEntry{1, 1879048192, -1879048191, -1879048191, "nc"},
    TestEntry{1, -1879048192, 1879048193, 1879048193, "c"},
    TestEntry{1, 32767, -32766, -32766, "nc"},
    TestEntry{1, 32768, -32767, -32767, "nc"},
    TestEntry{1, 127, -126, -126, "nc"},
    TestEntry{1, 128, -127, -127, "nc"},
    TestEntry{1, 1065353216, -1065353215, -1065353215, "nc"},
    TestEntry{1, -1082130432, 1082130433, 1082130433, "c"},
    TestEntry{1, 1073741824, -1073741823, -1073741823, "nc"},
    TestEntry{1, -268435456, 268435457, 268435457, "c"},
    TestEntry{1879048192, -2147483648, -268435456, -2147483648, "nc"},
    TestEntry{1879048192, 2147483647, -268435455, -268435455, "nc"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, 1879048193, 1879048193, "c"},
    TestEntry{1879048192, 1, 1879048191, 1879048191, ""},
    TestEntry{1879048192, 1879048192, 0, 0, "z"},
    TestEntry{1879048192, -1879048192, -536870912, -2147483648, "nc"},
    TestEntry{1879048192, 32767, 1879015425, 1879015425, ""},
    TestEntry{1879048192, 32768, 1879015424, 1879015424, ""},
    TestEntry{1879048192, 127, 1879048065, 1879048065, ""},
    TestEntry{1879048192, 128, 1879048064, 1879048064, ""},
    TestEntry{1879048192, 1065353216, 813694976, 813694976, ""},
    TestEntry{1879048192, -1082130432, -1333788672, -2147483648, "nc"},
    TestEntry{1879048192, 1073741824, 805306368, 805306368, ""},
    TestEntry{1879048192, -268435456, -2147483648, -2147483648, "nc"},
    TestEntry{-1879048192, -2147483648, 268435456, 268435456, ""},
    TestEntry{-1879048192, 2147483647, 268435457, 2147483647, ""},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1879048191, -1879048191, "nc"},
    TestEntry{-1879048192, 1, -1879048193, -1879048193, "n"},
    TestEntry{-1879048192, 1879048192, 536870912, 2147483647, ""},
    TestEntry{-1879048192, -1879048192, 0, 0, "z"},
    TestEntry{-1879048192, 32767, -1879080959, -1879080959, "n"},
    TestEntry{-1879048192, 32768, -1879080960, -1879080960, "n"},
    TestEntry{-1879048192, 127, -1879048319, -1879048319, "n"},
    TestEntry{-1879048192, 128, -1879048320, -1879048320, "n"},
    TestEntry{-1879048192, 1065353216, 1350565888, 2147483647, ""},
    TestEntry{-1879048192, -1082130432, -796917760, -796917760, "nc"},
    TestEntry{-1879048192, 1073741824, 1342177280, 2147483647, ""},
    TestEntry{-1879048192, -268435456, -1610612736, -1610612736, "nc"},
    TestEntry{32767, -2147483648, -2147450881, -2147483648, "nc"},
    TestEntry{32767, 2147483647, -2147450880, -2147450880, "nc"},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, 32768, 32768, "c"},
    TestEntry{32767, 1, 32766, 32766, ""},
    TestEntry{32767, 1879048192, -1879015425, -1879015425, "nc"},
    TestEntry{32767, -1879048192, 1879080959, 1879080959, "c"},
    TestEntry{32767, 32767, 0, 0, "z"},
    TestEntry{32767, 32768, -1, -1, "nc"},
    TestEntry{32767, 127, 32640, 32640, ""},
    TestEntry{32767, 128, 32639, 32639, ""},
    TestEntry{32767, 1065353216, -1065320449, -1065320449, "nc"},
    TestEntry{32767, -1082130432, 1082163199, 1082163199, "c"},
    TestEntry{32767, 1073741824, -1073709057, -1073709057, "nc"},
    TestEntry{32767, -268435456, 268468223, 268468223, "c"},
    TestEntry{32768, -2147483648, -2147450880, -2147483648, "nc"},
    TestEntry{32768, 2147483647, -2147450879, -2147450879, "nc"},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, 32769, 32769, "c"},
    TestEntry{32768, 1, 32767, 32767, ""},
    TestEntry{32768, 1879048192, -1879015424, -1879015424, "nc"},
    TestEntry{32768, -1879048192, 1879080960, 1879080960, "c"},
    TestEntry{32768, 32767, 1, 1, ""},
    TestEntry{32768, 32768, 0, 0, "z"},
    TestEntry{32768, 127, 32641, 32641, ""},
    TestEntry{32768, 128, 32640, 32640, ""},
    TestEntry{32768, 1065353216, -1065320448, -1065320448, "nc"},
    TestEntry{32768, -1082130432, 1082163200, 1082163200, "c"},
    TestEntry{32768, 1073741824, -1073709056, -1073709056, "nc"},
    TestEntry{32768, -268435456, 268468224, 268468224, "c"},
    TestEntry{127, -2147483648, -2147483521, -2147483648, "nc"},
    TestEntry{127, 2147483647, -2147483520, -2147483520, "nc"},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, 128, 128, "c"},
    TestEntry{127, 1, 126, 126, ""},
    TestEntry{127, 1879048192, -1879048065, -1879048065, "nc"},
    TestEntry{127, -1879048192, 1879048319, 1879048319, "c"},
    TestEntry{127, 32767, -32640, -32640, "nc"},
    TestEntry{127, 32768, -32641, -32641, "nc"},
    TestEntry{127, 127, 0, 0, "z"},
    TestEntry{127, 128, -1, -1, "nc"},
    TestEntry{127, 1065353216, -1065353089, -1065353089, "nc"},
    TestEntry{127, -1082130432, 1082130559, 1082130559, "c"},
    TestEntry{127, 1073741824, -1073741697, -1073741697, "nc"},
    TestEntry{127, -268435456, 268435583, 268435583, "c"},
    TestEntry{128, -2147483648, -2147483520, -2147483648, "nc"},
    TestEntry{128, 2147483647, -2147483519, -2147483519, "nc"},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, 129, 129, "c"},
    TestEntry{128, 1, 127, 127, ""},
    TestEntry{128, 1879048192, -1879048064, -1879048064, "nc"},
    TestEntry{128, -1879048192, 1879048320, 1879048320, "c"},
    TestEntry{128, 32767, -32639, -32639, "nc"},
    TestEntry{128, 32768, -32640, -32640, "nc"},
    TestEntry{128, 127, 1, 1, ""},
    TestEntry{128, 128, 0, 0, "z"},
    TestEntry{128, 1065353216, -1065353088, -1065353088, "nc"},
    TestEntry{128, -1082130432, 1082130560, 1082130560, "c"},
    TestEntry{128, 1073741824, -1073741696, -1073741696, "nc"},
    TestEntry{128, -268435456, 268435584, 268435584, "c"},
    TestEntry{1065353216, -2147483648, -1082130432, -2147483648, "nc"},
    TestEntry{1065353216, 2147483647, -1082130431, -1082130431, "nc"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, 1065353217, 1065353217, "c"},
    TestEntry{1065353216, 1, 1065353215, 1065353215, ""},
    TestEntry{1065353216, 1879048192, -813694976, -813694976, "nc"},
    TestEntry{1065353216, -1879048192, -1350565888, -2147483648, "nc"},
    TestEntry{1065353216, 32767, 1065320449, 1065320449, ""},
    TestEntry{1065353216, 32768, 1065320448, 1065320448, ""},
    TestEntry{1065353216, 127, 1065353089, 1065353089, ""},
    TestEntry{1065353216, 128, 1065353088, 1065353088, ""},
    TestEntry{1065353216, 1065353216, 0, 0, "z"},
    TestEntry{1065353216, -1082130432, -2147483648, -2147483648, "nc"},
    TestEntry{1065353216, 1073741824, -8388608, -8388608, "nc"},
    TestEntry{1065353216, -268435456, 1333788672, 1333788672, "c"},
    TestEntry{-1082130432, -2147483648, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 2147483647, 1065353217, 2147483647, ""},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1082130431, -1082130431, "nc"},
    TestEntry{-1082130432, 1, -1082130433, -1082130433, "n"},
    TestEntry{-1082130432, 1879048192, 1333788672, 2147483647, ""},
    TestEntry{-1082130432, -1879048192, 796917760, 796917760, ""},
    TestEntry{-1082130432, 32767, -1082163199, -1082163199, "n"},
    TestEntry{-1082130432, 32768, -1082163200, -1082163200, "n"},
    TestEntry{-1082130432, 127, -1082130559, -1082130559, "n"},
    TestEntry{-1082130432, 128, -1082130560, -1082130560, "n"},
    TestEntry{-1082130432, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-1082130432, -1082130432, 0, 0, "z"},
    TestEntry{-1082130432, 1073741824, 2139095040, 2147483647, ""},
    TestEntry{-1082130432, -268435456, -813694976, -813694976, "nc"},
    TestEntry{1073741824, -2147483648, -1073741824, -2147483648, "nc"},
    TestEntry{1073741824, 2147483647, -1073741823, -1073741823, "nc"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, 1073741825, 1073741825, "c"},
    TestEntry{1073741824, 1, 1073741823, 1073741823, ""},
    TestEntry{1073741824, 1879048192, -805306368, -805306368, "nc"},
    TestEntry{1073741824, -1879048192, -1342177280, -2147483648, "nc"},
    TestEntry{1073741824, 32767, 1073709057, 1073709057, ""},
    TestEntry{1073741824, 32768, 1073709056, 1073709056, ""},
    TestEntry{1073741824, 127, 1073741697, 1073741697, ""},
    TestEntry{1073741824, 128, 1073741696, 1073741696, ""},
    TestEntry{1073741824, 1065353216, 8388608, 8388608, ""},
    TestEntry{1073741824, -1082130432, -2139095040, -2147483648, "nc"},
    TestEntry{1073741824, 1073741824, 0, 0, "z"},
    TestEntry{1073741824, -268435456, 1342177280, 1342177280, "c"},
    TestEntry{-268435456, -2147483648, 1879048192, 1879048192, ""},
    TestEntry{-268435456, 2147483647, 1879048193, 2147483647, ""},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -268435455, -268435455, "nc"},
    TestEntry{-268435456, 1, -268435457, -268435457, "n"},
    TestEntry{-268435456, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-268435456, -1879048192, 1610612736, 1610612736, ""},
    TestEntry{-268435456, 32767, -268468223, -268468223, "n"},
    TestEntry{-268435456, 32768, -268468224, -268468224, "n"},
    TestEntry{-268435456, 127, -268435583, -268435583, "n"},
    TestEntry{-268435456, 128, -268435584, -268435584, "n"},
    TestEntry{-268435456, 1065353216, -1333788672, -1333788672, "n"},
    TestEntry{-268435456, -1082130432, 813694976, 813694976, ""},
    TestEntry{-268435456, 1073741824, -1342177280, -1342177280, "n"},
    TestEntry{-268435456, -268435456, 0, 0, "z"},
};

static const std::vector<TestEntry> TEST_OP_ITOF = {
    TestEntry{-2147483648, -2147483648, -822083584, -822083584, "n"},
    TestEntry{2147483647, -2147483648, 1325400063, 1325400063, "c"},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{-1, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{1, -2147483648, 1065353216, 1065353216, "c"},
    TestEntry{1879048192, -2147483648, 1323302912, 1323302912, "c"},
    TestEntry{-1879048192, -2147483648, -824180736, -824180736, "n"},
    TestEntry{32767, -2147483648, 1191181824, 1191181824, "c"},
    TestEntry{32768, -2147483648, 1191182336, 1191182336, "c"},
    TestEntry{127, -2147483648, 1123942400, 1123942400, "c"},
    TestEntry{128, -2147483648, 1124073472, 1124073472, "c"},
    TestEntry{1065353216, -2147483648, 1316880384, 1316880384, "c"},
    TestEntry{-1082130432, -2147483648, -830406656, -830406656, "n"},
    TestEntry{1073741824, -2147483648, 1317011456, 1317011456, "c"},
    TestEntry{-268435456, -2147483648, -847249408, -847249408, "n"},
};

static const std::vector<TestEntry> TEST_OP_ROR = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, 1, 1, ""},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, 1, 1, ""},
    TestEntry{-2147483648, 1, 1073741824, 1073741824, ""},
    TestEntry{-2147483648, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32767, 1, 1, ""},
    TestEntry{-2147483648, 32768, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 127, 1, 1, ""},
    TestEntry{-2147483648, 128, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 2147483647, -2, -2, "n"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, -2, -2, "n"},
    TestEntry{2147483647, 1, -1073741825, -1073741825, "n"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 32767, -2, -2, "n"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 127, -2, -2, "n"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1082130432, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -268435456, 2147483647, 2147483647, ""},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "z"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, 0, 0, "z"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, 0, 0, "z"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, 0, 0, "z"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, -1, -1, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, -1, -1, "n"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, -1, -1, "n"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -1, -1, "n"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, 1, 1, ""},
    TestEntry{1, 2147483647, 2, 2, ""},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, 2, 2, ""},
    TestEntry{1, 1, -2147483648, -2147483648, "n"},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, 1, 1, ""},
    TestEntry{1, 32767, 2, 2, ""},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, 2, 2, ""},
    TestEntry{1, 128, 1, 1, ""},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, 1, 1, ""},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, 1, 1, ""},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 2147483647, -536870912, -536870912, "n"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, -536870912, -536870912, "n"},
    TestEntry{1879048192, 1, 939524096, 939524096, ""},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 32767, -536870912, -536870912, "n"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 127, -536870912, -536870912, "n"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, 536870913, 536870913, ""},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, 536870913, 536870913, ""},
    TestEntry{-1879048192, 1, 1207959552, 1207959552, ""},
    TestEntry{-1879048192, 1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, 536870913, 536870913, ""},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, 536870913, 536870913, ""},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1073741824, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "n"},
    TestEntry{32767, -2147483648, 32767, 32767, ""},
    TestEntry{32767, 2147483647, 65534, 65534, ""},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, 65534, 65534, ""},
    TestEntry{32767, 1, -2147467265, -2147467265, "n"},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, 32767, 32767, ""},
    TestEntry{32767, 32767, 65534, 65534, ""},
    TestEntry{32767, 32768, 32767, 32767, ""},
    TestEntry{32767, 127, 65534, 65534, ""},
    TestEntry{32767, 128, 32767, 32767, ""},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, 32767, 32767, ""},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, 32767, 32767, ""},
    TestEntry{32768, -2147483648, 32768, 32768, ""},
    TestEntry{32768, 2147483647, 65536, 65536, ""},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, 65536, 65536, ""},
    TestEntry{32768, 1, 16384, 16384, ""},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, 32768, 32768, ""},
    TestEntry{32768, 32767, 65536, 65536, ""},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 65536, 65536, ""},
    TestEntry{32768, 128, 32768, 32768, ""},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, 32768, 32768, ""},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, 32768, 32768, ""},
    TestEntry{127, -2147483648, 127, 127, ""},
    TestEntry{127, 2147483647, 254, 254, ""},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, 254, 254, ""},
    TestEntry{127, 1, -2147483585, -2147483585, "n"},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, 127, 127, ""},
    TestEntry{127, 32767, 254, 254, ""},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, 254, 254, ""},
    TestEntry{127, 128, 127, 127, ""},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, 127, 127, ""},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, 127, 127, ""},
    TestEntry{128, -2147483648, 128, 128, ""},
    TestEntry{128, 2147483647, 256, 256, ""},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, 256, 256, ""},
    TestEntry{128, 1, 64, 64, ""},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, 128, 128, ""},
    TestEntry{128, 32767, 256, 256, ""},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 256, 256, ""},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, 128, 128, ""},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, 128, 128, ""},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 2147483647, 2130706432, 2130706432, ""},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, 2130706432, 2130706432, ""},
    TestEntry{1065353216, 1, 532676608, 532676608, ""},
    TestEntry{1065353216, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 32767, 2130706432, 2130706432, ""},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 127, 2130706432, 2130706432, ""},
    TestEntry{1065353216, 128, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -268435456, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, 2130706433, 2130706433, ""},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, 2130706433, 2130706433, ""},
    TestEntry{-1082130432, 1, 1606418432, 1606418432, ""},
    TestEntry{-1082130432, 1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, 2130706433, 2130706433, ""},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, 2130706433, 2130706433, ""},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -268435456, -1082130432, -1082130432, "n"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 2147483647, -2147483648, -2147483648, "n"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, -2147483648, -2147483648, "n"},
    TestEntry{1073741824, 1, 536870912, 536870912, ""},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 32767, -2147483648, -2147483648, "n"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 127, -2147483648, -2147483648, "n"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, -536870911, -536870911, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -536870911, -536870911, "n"},
    TestEntry{-268435456, 1, 2013265920, 2013265920, ""},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, -536870911, -536870911, "n"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, -536870911, -536870911, "n"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_SHL = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, 0, 0, "z"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, 0, 0, "z"},
    TestEntry{-2147483648, 1, 0, 0, "cz"},
    TestEntry{-2147483648, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32767, 0, 0, "z"},
    TestEntry{-2147483648, 32768, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 127, 0, 0, "z"},
    TestEntry{-2147483648, 128, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 2147483647, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, 1, -2, -2, "n"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 32767, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 127, -2147483648, -2147483648, "nc"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1082130432, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -268435456, 2147483647, 2147483647, ""},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "z"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, 0, 0, "z"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, 0, 0, "z"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, 0, 0, "z"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, -2147483648, -2147483648, "nc"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -2147483648, -2147483648, "nc"},
    TestEntry{-1, 1, -2, -2, "nc"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, -2147483648, -2147483648, "nc"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -2147483648, -2147483648, "nc"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, 1, 1, ""},
    TestEntry{1, 2147483647, -2147483648, -2147483648, "n"},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, -2147483648, -2147483648, "n"},
    TestEntry{1, 1, 2, 2, ""},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, 1, 1, ""},
    TestEntry{1, 32767, -2147483648, -2147483648, "n"},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, -2147483648, -2147483648, "n"},
    TestEntry{1, 128, 1, 1, ""},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, 1, 1, ""},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, 1, 1, ""},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 2147483647, 0, 0, "z"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, 0, 0, "z"},
    TestEntry{1879048192, 1, -536870912, -536870912, "n"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 32767, 0, 0, "z"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 127, 0, 0, "z"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, 0, 0, "z"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, 0, 0, "z"},
    TestEntry{-1879048192, 1, 536870912, 536870912, "c"},
    TestEntry{-1879048192, 1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, 0, 0, "z"},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, 0, 0, "z"},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1073741824, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "n"},
    TestEntry{32767, -2147483648, 32767, 32767, ""},
    TestEntry{32767, 2147483647, -2147483648, -2147483648, "nc"},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, -2147483648, -2147483648, "nc"},
    TestEntry{32767, 1, 65534, 65534, ""},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, 32767, 32767, ""},
    TestEntry{32767, 32767, -2147483648, -2147483648, "nc"},
    TestEntry{32767, 32768, 32767, 32767, ""},
    TestEntry{32767, 127, -2147483648, -2147483648, "nc"},
    TestEntry{32767, 128, 32767, 32767, ""},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, 32767, 32767, ""},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, 32767, 32767, ""},
    TestEntry{32768, -2147483648, 32768, 32768, ""},
    TestEntry{32768, 2147483647, 0, 0, "z"},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, 0, 0, "z"},
    TestEntry{32768, 1, 65536, 65536, ""},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, 32768, 32768, ""},
    TestEntry{32768, 32767, 0, 0, "z"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 0, 0, "z"},
    TestEntry{32768, 128, 32768, 32768, ""},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, 32768, 32768, ""},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, 32768, 32768, ""},
    TestEntry{127, -2147483648, 127, 127, ""},
    TestEntry{127, 2147483647, -2147483648, -2147483648, "nc"},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, -2147483648, -2147483648, "nc"},
    TestEntry{127, 1, 254, 254, ""},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, 127, 127, ""},
    TestEntry{127, 32767, -2147483648, -2147483648, "nc"},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, -2147483648, -2147483648, "nc"},
    TestEntry{127, 128, 127, 127, ""},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, 127, 127, ""},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, 127, 127, ""},
    TestEntry{128, -2147483648, 128, 128, ""},
    TestEntry{128, 2147483647, 0, 0, "z"},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, 0, 0, "z"},
    TestEntry{128, 1, 256, 256, ""},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, 128, 128, ""},
    TestEntry{128, 32767, 0, 0, "z"},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 0, 0, "z"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, 128, 128, ""},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, 128, 128, ""},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 2147483647, 0, 0, "z"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, 0, 0, "z"},
    TestEntry{1065353216, 1, 2130706432, 2130706432, ""},
    TestEntry{1065353216, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 32767, 0, 0, "z"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 127, 0, 0, "z"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -268435456, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, 0, 0, "z"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, 0, 0, "z"},
    TestEntry{-1082130432, 1, 2130706432, 2130706432, "c"},
    TestEntry{-1082130432, 1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, 0, 0, "z"},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, 0, 0, "z"},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -268435456, -1082130432, -1082130432, "n"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 2147483647, 0, 0, "z"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, 0, 0, "z"},
    TestEntry{1073741824, 1, -2147483648, -2147483648, "n"},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 32767, 0, 0, "z"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 127, 0, 0, "z"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, 0, 0, "z"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, 0, 0, "z"},
    TestEntry{-268435456, 1, -536870912, -536870912, "nc"},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, 0, 0, "z"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, 0, 0, "z"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_SHR = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, 1, 1, ""},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, 1, 1, ""},
    TestEntry{-2147483648, 1, 1073741824, 1073741824, ""},
    TestEntry{-2147483648, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32767, 1, 1, ""},
    TestEntry{-2147483648, 32768, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 127, 1, 1, ""},
    TestEntry{-2147483648, 128, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 2147483647, 0, 0, "cz"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, 0, 0, "cz"},
    TestEntry{2147483647, 1, 1073741823, 1073741823, "c"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1879048192, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 32767, 0, 0, "cz"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 127, 0, 0, "cz"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1082130432, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -268435456, 2147483647, 2147483647, ""},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "z"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, 0, 0, "z"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, 0, 0, "z"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, 0, 0, "z"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, 1, 1, "c"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, 1, 1, "c"},
    TestEntry{-1, 1, 2147483647, 2147483647, "c"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, 1, 1, "c"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, 1, 1, "c"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, 1, 1, ""},
    TestEntry{1, 2147483647, 0, 0, "z"},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, 0, 0, "z"},
    TestEntry{1, 1, 0, 0, "cz"},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, 1, 1, ""},
    TestEntry{1, 32767, 0, 0, "z"},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, 0, 0, "z"},
    TestEntry{1, 128, 1, 1, ""},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, 1, 1, ""},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, 1, 1, ""},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 2147483647, 0, 0, "cz"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, 0, 0, "cz"},
    TestEntry{1879048192, 1, 939524096, 939524096, ""},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 32767, 0, 0, "cz"},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 127, 0, 0, "cz"},
    TestEntry{1879048192, 128, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1065353216, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, ""},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, 1, 1, ""},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, 1, 1, ""},
    TestEntry{-1879048192, 1, 1207959552, 1207959552, ""},
    TestEntry{-1879048192, 1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, 1, 1, ""},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, 1, 1, ""},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1073741824, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "n"},
    TestEntry{32767, -2147483648, 32767, 32767, ""},
    TestEntry{32767, 2147483647, 0, 0, "z"},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, 0, 0, "z"},
    TestEntry{32767, 1, 16383, 16383, "c"},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, 32767, 32767, ""},
    TestEntry{32767, 32767, 0, 0, "z"},
    TestEntry{32767, 32768, 32767, 32767, ""},
    TestEntry{32767, 127, 0, 0, "z"},
    TestEntry{32767, 128, 32767, 32767, ""},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, 32767, 32767, ""},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, 32767, 32767, ""},
    TestEntry{32768, -2147483648, 32768, 32768, ""},
    TestEntry{32768, 2147483647, 0, 0, "z"},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, 0, 0, "z"},
    TestEntry{32768, 1, 16384, 16384, ""},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, 32768, 32768, ""},
    TestEntry{32768, 32767, 0, 0, "z"},
    TestEntry{32768, 32768, 32768, 32768, ""},
    TestEntry{32768, 127, 0, 0, "z"},
    TestEntry{32768, 128, 32768, 32768, ""},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, 32768, 32768, ""},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, 32768, 32768, ""},
    TestEntry{127, -2147483648, 127, 127, ""},
    TestEntry{127, 2147483647, 0, 0, "z"},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, 0, 0, "z"},
    TestEntry{127, 1, 63, 63, "c"},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, 127, 127, ""},
    TestEntry{127, 32767, 0, 0, "z"},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, 0, 0, "z"},
    TestEntry{127, 128, 127, 127, ""},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, 127, 127, ""},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, 127, 127, ""},
    TestEntry{128, -2147483648, 128, 128, ""},
    TestEntry{128, 2147483647, 0, 0, "z"},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, 0, 0, "z"},
    TestEntry{128, 1, 64, 64, ""},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, 128, 128, ""},
    TestEntry{128, 32767, 0, 0, "z"},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 0, 0, "z"},
    TestEntry{128, 128, 128, 128, ""},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, 128, 128, ""},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, 128, 128, ""},
    TestEntry{1065353216, -2147483648, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 2147483647, 0, 0, "z"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, 0, 0, "z"},
    TestEntry{1065353216, 1, 532676608, 532676608, ""},
    TestEntry{1065353216, 1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1879048192, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 32767, 0, 0, "z"},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 127, 0, 0, "z"},
    TestEntry{1065353216, 128, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1073741824, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -268435456, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, 1, 1, ""},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, 1, 1, ""},
    TestEntry{-1082130432, 1, 1606418432, 1606418432, ""},
    TestEntry{-1082130432, 1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, 1, 1, ""},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, 1, 1, ""},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -268435456, -1082130432, -1082130432, "n"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 2147483647, 0, 0, "cz"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, 0, 0, "cz"},
    TestEntry{1073741824, 1, 536870912, 536870912, ""},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 32767, 0, 0, "cz"},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 127, 0, 0, "cz"},
    TestEntry{1073741824, 128, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1065353216, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, ""},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, 1, 1, "c"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, 1, 1, "c"},
    TestEntry{-268435456, 1, 2013265920, 2013265920, ""},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, 1, 1, "c"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, 1, 1, "c"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1082130432, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_V8ADDS = {
    TestEntry{-2147483648, -2147483648, -16777216, -16777216, "n"},
    TestEntry{-2147483648, 2147483647, -1, -1, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, -1, -1, "n"},
    TestEntry{-2147483648, 1, -2147483647, -2147483647, "n"},
    TestEntry{-2147483648, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-2147483648, -1879048192, -16777216, -16777216, "n"},
    TestEntry{-2147483648, 32767, -2147450881, -2147450881, "n"},
    TestEntry{-2147483648, 32768, -2147450880, -2147450880, "n"},
    TestEntry{-2147483648, 127, -2147483521, -2147483521, "n"},
    TestEntry{-2147483648, 128, -2147483520, -2147483520, "n"},
    TestEntry{-2147483648, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, -1082130432, -8388608, -8388608, "n"},
    TestEntry{-2147483648, 1073741824, -1073741824, -1073741824, "n"},
    TestEntry{-2147483648, -268435456, -16777216, -16777216, "n"},
    TestEntry{2147483647, -2147483648, -1, -1, "n"},
    TestEntry{2147483647, 2147483647, -16777217, -16777217, "n"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, -1, -1, "n"},
    TestEntry{2147483647, 1, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1879048192, -268435457, -268435457, "n"},
    TestEntry{2147483647, -1879048192, -1, -1, "n"},
    TestEntry{2147483647, 32767, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 127, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 128, 2147483647, 2147483647, ""},
    TestEntry{2147483647, 1065353216, -1090519041, -1090519041, "n"},
    TestEntry{2147483647, -1082130432, -1, -1, "n"},
    TestEntry{2147483647, 1073741824, -1073741825, -1073741825, "n"},
    TestEntry{2147483647, -268435456, -1, -1, "n"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, -1, -1, "n"},
    TestEntry{0, 1, 1, 1, ""},
    TestEntry{0, 1879048192, 1879048192, 1879048192, ""},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{0, 32767, 32767, 32767, ""},
    TestEntry{0, 32768, 32768, 32768, ""},
    TestEntry{0, 127, 127, 127, ""},
    TestEntry{0, 128, 128, 128, ""},
    TestEntry{0, 1065353216, 1065353216, 1065353216, ""},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{0, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, -1, -1, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, -1, -1, "n"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, -1, -1, "n"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -1, -1, "n"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, -2147483647, -2147483647, "n"},
    TestEntry{1, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, -1, -1, "n"},
    TestEntry{1, 1, 2, 2, ""},
    TestEntry{1, 1879048192, 1879048193, 1879048193, ""},
    TestEntry{1, -1879048192, -1879048191, -1879048191, "n"},
    TestEntry{1, 32767, 32767, 32767, ""},
    TestEntry{1, 32768, 32769, 32769, ""},
    TestEntry{1, 127, 128, 128, ""},
    TestEntry{1, 128, 129, 129, ""},
    TestEntry{1, 1065353216, 1065353217, 1065353217, ""},
    TestEntry{1, -1082130432, -1082130431, -1082130431, "n"},
    TestEntry{1, 1073741824, 1073741825, 1073741825, ""},
    TestEntry{1, -268435456, -268435455, -268435455, "n"},
    TestEntry{1879048192, -2147483648, -268435456, -268435456, "n"},
    TestEntry{1879048192, 2147483647, -268435457, -268435457, "n"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, -1, -1, "n"},
    TestEntry{1879048192, 1, 1879048193, 1879048193, ""},
    TestEntry{1879048192, 1879048192, -536870912, -536870912, "n"},
    TestEntry{1879048192, -1879048192, -16777216, -16777216, "n"},
    TestEntry{1879048192, 32767, 1879080959, 1879080959, ""},
    TestEntry{1879048192, 32768, 1879080960, 1879080960, ""},
    TestEntry{1879048192, 127, 1879048319, 1879048319, ""},
    TestEntry{1879048192, 128, 1879048320, 1879048320, ""},
    TestEntry{1879048192, 1065353216, -1350565888, -1350565888, "n"},
    TestEntry{1879048192, -1082130432, -8388608, -8388608, "n"},
    TestEntry{1879048192, 1073741824, -1342177280, -1342177280, "n"},
    TestEntry{1879048192, -268435456, -16777216, -16777216, "n"},
    TestEntry{-1879048192, -2147483648, -16777216, -16777216, "n"},
    TestEntry{-1879048192, 2147483647, -1, -1, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1, -1, "n"},
    TestEntry{-1879048192, 1, -1879048191, -1879048191, "n"},
    TestEntry{-1879048192, 1879048192, -16777216, -16777216, "n"},
    TestEntry{-1879048192, -1879048192, -16777216, -16777216, "n"},
    TestEntry{-1879048192, 32767, -1879015425, -1879015425, "n"},
    TestEntry{-1879048192, 32768, -1879015424, -1879015424, "n"},
    TestEntry{-1879048192, 127, -1879048065, -1879048065, "n"},
    TestEntry{-1879048192, 128, -1879048064, -1879048064, "n"},
    TestEntry{-1879048192, 1065353216, -813694976, -813694976, "n"},
    TestEntry{-1879048192, -1082130432, -8388608, -8388608, "n"},
    TestEntry{-1879048192, 1073741824, -805306368, -805306368, "n"},
    TestEntry{-1879048192, -268435456, -16777216, -16777216, "n"},
    TestEntry{32767, -2147483648, -2147450881, -2147450881, "n"},
    TestEntry{32767, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, -1, -1, "n"},
    TestEntry{32767, 1, 32767, 32767, ""},
    TestEntry{32767, 1879048192, 1879080959, 1879080959, ""},
    TestEntry{32767, -1879048192, -1879015425, -1879015425, "n"},
    TestEntry{32767, 32767, 65279, 65279, ""},
    TestEntry{32767, 32768, 65535, 65535, ""},
    TestEntry{32767, 127, 32767, 32767, ""},
    TestEntry{32767, 128, 32767, 32767, ""},
    TestEntry{32767, 1065353216, 1065385983, 1065385983, ""},
    TestEntry{32767, -1082130432, -1082097665, -1082097665, "n"},
    TestEntry{32767, 1073741824, 1073774591, 1073774591, ""},
    TestEntry{32767, -268435456, -268402689, -268402689, "n"},
    TestEntry{32768, -2147483648, -2147450880, -2147450880, "n"},
    TestEntry{32768, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, -1, -1, "n"},
    TestEntry{32768, 1, 32769, 32769, ""},
    TestEntry{32768, 1879048192, 1879080960, 1879080960, ""},
    TestEntry{32768, -1879048192, -1879015424, -1879015424, "n"},
    TestEntry{32768, 32767, 65535, 65535, ""},
    TestEntry{32768, 32768, 65280, 65280, ""},
    TestEntry{32768, 127, 32895, 32895, ""},
    TestEntry{32768, 128, 32896, 32896, ""},
    TestEntry{32768, 1065353216, 1065385984, 1065385984, ""},
    TestEntry{32768, -1082130432, -1082097664, -1082097664, "n"},
    TestEntry{32768, 1073741824, 1073774592, 1073774592, ""},
    TestEntry{32768, -268435456, -268402688, -268402688, "n"},
    TestEntry{127, -2147483648, -2147483521, -2147483521, "n"},
    TestEntry{127, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, -1, -1, "n"},
    TestEntry{127, 1, 128, 128, ""},
    TestEntry{127, 1879048192, 1879048319, 1879048319, ""},
    TestEntry{127, -1879048192, -1879048065, -1879048065, "n"},
    TestEntry{127, 32767, 32767, 32767, ""},
    TestEntry{127, 32768, 32895, 32895, ""},
    TestEntry{127, 127, 254, 254, ""},
    TestEntry{127, 128, 255, 255, ""},
    TestEntry{127, 1065353216, 1065353343, 1065353343, ""},
    TestEntry{127, -1082130432, -1082130305, -1082130305, "n"},
    TestEntry{127, 1073741824, 1073741951, 1073741951, ""},
    TestEntry{127, -268435456, -268435329, -268435329, "n"},
    TestEntry{128, -2147483648, -2147483520, -2147483520, "n"},
    TestEntry{128, 2147483647, 2147483647, 2147483647, ""},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, -1, -1, "n"},
    TestEntry{128, 1, 129, 129, ""},
    TestEntry{128, 1879048192, 1879048320, 1879048320, ""},
    TestEntry{128, -1879048192, -1879048064, -1879048064, "n"},
    TestEntry{128, 32767, 32767, 32767, ""},
    TestEntry{128, 32768, 32896, 32896, ""},
    TestEntry{128, 127, 255, 255, ""},
    TestEntry{128, 128, 255, 255, ""},
    TestEntry{128, 1065353216, 1065353344, 1065353344, ""},
    TestEntry{128, -1082130432, -1082130304, -1082130304, "n"},
    TestEntry{128, 1073741824, 1073741952, 1073741952, ""},
    TestEntry{128, -268435456, -268435328, -268435328, "n"},
    TestEntry{1065353216, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 2147483647, -1090519041, -1090519041, "n"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, -1, -1, "n"},
    TestEntry{1065353216, 1, 1065353217, 1065353217, ""},
    TestEntry{1065353216, 1879048192, -1350565888, -1350565888, "n"},
    TestEntry{1065353216, -1879048192, -813694976, -813694976, "n"},
    TestEntry{1065353216, 32767, 1065385983, 1065385983, ""},
    TestEntry{1065353216, 32768, 1065385984, 1065385984, ""},
    TestEntry{1065353216, 127, 1065353343, 1065353343, ""},
    TestEntry{1065353216, 128, 1065353344, 1065353344, ""},
    TestEntry{1065353216, 1065353216, 2130640896, 2130640896, ""},
    TestEntry{1065353216, -1082130432, -16842752, -16842752, "n"},
    TestEntry{1065353216, 1073741824, 2139095040, 2139095040, ""},
    TestEntry{1065353216, -268435456, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -2147483648, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 2147483647, -1, -1, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1, -1, "n"},
    TestEntry{-1082130432, 1, -1082130431, -1082130431, "n"},
    TestEntry{-1082130432, 1879048192, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -1879048192, -8388608, -8388608, "n"},
    TestEntry{-1082130432, 32767, -1082097665, -1082097665, "n"},
    TestEntry{-1082130432, 32768, -1082097664, -1082097664, "n"},
    TestEntry{-1082130432, 127, -1082130305, -1082130305, "n"},
    TestEntry{-1082130432, 128, -1082130304, -1082130304, "n"},
    TestEntry{-1082130432, 1065353216, -16842752, -16842752, "n"},
    TestEntry{-1082130432, -1082130432, -65536, -65536, "n"},
    TestEntry{-1082130432, 1073741824, -8388608, -8388608, "n"},
    TestEntry{-1082130432, -268435456, -8388608, -8388608, "n"},
    TestEntry{1073741824, -2147483648, -1073741824, -1073741824, "n"},
    TestEntry{1073741824, 2147483647, -1073741825, -1073741825, "n"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, -1, -1, "n"},
    TestEntry{1073741824, 1, 1073741825, 1073741825, ""},
    TestEntry{1073741824, 1879048192, -1342177280, -1342177280, "n"},
    TestEntry{1073741824, -1879048192, -805306368, -805306368, "n"},
    TestEntry{1073741824, 32767, 1073774591, 1073774591, ""},
    TestEntry{1073741824, 32768, 1073774592, 1073774592, ""},
    TestEntry{1073741824, 127, 1073741951, 1073741951, ""},
    TestEntry{1073741824, 128, 1073741952, 1073741952, ""},
    TestEntry{1073741824, 1065353216, 2139095040, 2139095040, ""},
    TestEntry{1073741824, -1082130432, -8388608, -8388608, "n"},
    TestEntry{1073741824, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{1073741824, -268435456, -16777216, -16777216, "n"},
    TestEntry{-268435456, -2147483648, -16777216, -16777216, "n"},
    TestEntry{-268435456, 2147483647, -1, -1, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -1, -1, "n"},
    TestEntry{-268435456, 1, -268435455, -268435455, "n"},
    TestEntry{-268435456, 1879048192, -16777216, -16777216, "n"},
    TestEntry{-268435456, -1879048192, -16777216, -16777216, "n"},
    TestEntry{-268435456, 32767, -268402689, -268402689, "n"},
    TestEntry{-268435456, 32768, -268402688, -268402688, "n"},
    TestEntry{-268435456, 127, -268435329, -268435329, "n"},
    TestEntry{-268435456, 128, -268435328, -268435328, "n"},
    TestEntry{-268435456, 1065353216, -8388608, -8388608, "n"},
    TestEntry{-268435456, -1082130432, -8388608, -8388608, "n"},
    TestEntry{-268435456, 1073741824, -16777216, -16777216, "n"},
    TestEntry{-268435456, -268435456, -16777216, -16777216, "n"},
};

static const std::vector<TestEntry> TEST_OP_V8MAX = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, -2130706433, -2130706433, "n"},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, -1, -1, "n"},
    TestEntry{-2147483648, 1, -2147483647, -2147483647, "n"},
    TestEntry{-2147483648, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-2147483648, 32767, -2147450881, -2147450881, "n"},
    TestEntry{-2147483648, 32768, -2147450880, -2147450880, "n"},
    TestEntry{-2147483648, 127, -2147483521, -2147483521, "n"},
    TestEntry{-2147483648, 128, -2147483520, -2147483520, "n"},
    TestEntry{-2147483648, 1065353216, -2139095040, -2139095040, "n"},
    TestEntry{-2147483648, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-2147483648, 1073741824, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -268435456, -268435456, -268435456, "n"},
    TestEntry{2147483647, -2147483648, -2130706433, -2130706433, "n"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, -1, -1, -1, "n"},
    TestEntry{2147483647, 1, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 1879048192, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, -1879048192, -1862270977, -1862270977, "n"},
    TestEntry{2147483647, 32767, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 32768, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 127, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 128, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 1065353216, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, -1082130432, -1073741825, -1073741825, "n"},
    TestEntry{2147483647, 1073741824, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, -268435456, -251658241, -251658241, "n"},
    TestEntry{0, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{0, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{0, 0, 0, 0, "n"},
    TestEntry{0, -1, -1, -1, "n"},
    TestEntry{0, 1, 1, 1, "n"},
    TestEntry{0, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{0, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{0, 32767, 32767, 32767, "n"},
    TestEntry{0, 32768, 32768, 32768, "n"},
    TestEntry{0, 127, 127, 127, "n"},
    TestEntry{0, 128, 128, 128, "n"},
    TestEntry{0, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{0, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{0, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{0, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1, -2147483648, -1, -1, "n"},
    TestEntry{-1, 2147483647, -1, -1, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, -1, -1, "n"},
    TestEntry{-1, 1879048192, -1, -1, "n"},
    TestEntry{-1, -1879048192, -1, -1, "n"},
    TestEntry{-1, 32767, -1, -1, "n"},
    TestEntry{-1, 32768, -1, -1, "n"},
    TestEntry{-1, 127, -1, -1, "n"},
    TestEntry{-1, 128, -1, -1, "n"},
    TestEntry{-1, 1065353216, -1, -1, "n"},
    TestEntry{-1, -1082130432, -1, -1, "n"},
    TestEntry{-1, 1073741824, -1, -1, "n"},
    TestEntry{-1, -268435456, -1, -1, "n"},
    TestEntry{1, -2147483648, -2147483647, -2147483647, "n"},
    TestEntry{1, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{1, 0, 1, 1, "n"},
    TestEntry{1, -1, -1, -1, "n"},
    TestEntry{1, 1, 1, 1, "n"},
    TestEntry{1, 1879048192, 1879048193, 1879048193, "n"},
    TestEntry{1, -1879048192, -1879048191, -1879048191, "n"},
    TestEntry{1, 32767, 32767, 32767, "n"},
    TestEntry{1, 32768, 32769, 32769, "n"},
    TestEntry{1, 127, 127, 127, "n"},
    TestEntry{1, 128, 128, 128, "n"},
    TestEntry{1, 1065353216, 1065353217, 1065353217, "n"},
    TestEntry{1, -1082130432, -1082130431, -1082130431, "n"},
    TestEntry{1, 1073741824, 1073741825, 1073741825, "n"},
    TestEntry{1, -268435456, -268435455, -268435455, "n"},
    TestEntry{1879048192, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{1879048192, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, -1, -1, -1, "n"},
    TestEntry{1879048192, 1, 1879048193, 1879048193, "n"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{1879048192, 32767, 1879080959, 1879080959, "n"},
    TestEntry{1879048192, 32768, 1879080960, 1879080960, "n"},
    TestEntry{1879048192, 127, 1879048319, 1879048319, "n"},
    TestEntry{1879048192, 128, 1879048320, 1879048320, "n"},
    TestEntry{1879048192, 1065353216, 1887436800, 1887436800, "n"},
    TestEntry{1879048192, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{1879048192, 1073741824, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, -268435456, -268435456, -268435456, "n"},
    TestEntry{-1879048192, -2147483648, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 2147483647, -1862270977, -1862270977, "n"},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, -1, -1, "n"},
    TestEntry{-1879048192, 1, -1879048191, -1879048191, "n"},
    TestEntry{-1879048192, 1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, -1879015425, -1879015425, "n"},
    TestEntry{-1879048192, 32768, -1879015424, -1879015424, "n"},
    TestEntry{-1879048192, 127, -1879048065, -1879048065, "n"},
    TestEntry{-1879048192, 128, -1879048064, -1879048064, "n"},
    TestEntry{-1879048192, 1065353216, -1870659584, -1870659584, "n"},
    TestEntry{-1879048192, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1879048192, 1073741824, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -268435456, -268435456, -268435456, "n"},
    TestEntry{32767, -2147483648, -2147450881, -2147450881, "n"},
    TestEntry{32767, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{32767, 0, 32767, 32767, "n"},
    TestEntry{32767, -1, -1, -1, "n"},
    TestEntry{32767, 1, 32767, 32767, "n"},
    TestEntry{32767, 1879048192, 1879080959, 1879080959, "n"},
    TestEntry{32767, -1879048192, -1879015425, -1879015425, "n"},
    TestEntry{32767, 32767, 32767, 32767, "n"},
    TestEntry{32767, 32768, 33023, 33023, "n"},
    TestEntry{32767, 127, 32767, 32767, "n"},
    TestEntry{32767, 128, 32767, 32767, "n"},
    TestEntry{32767, 1065353216, 1065385983, 1065385983, "n"},
    TestEntry{32767, -1082130432, -1082097665, -1082097665, "n"},
    TestEntry{32767, 1073741824, 1073774591, 1073774591, "n"},
    TestEntry{32767, -268435456, -268402689, -268402689, "n"},
    TestEntry{32768, -2147483648, -2147450880, -2147450880, "n"},
    TestEntry{32768, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{32768, 0, 32768, 32768, "n"},
    TestEntry{32768, -1, -1, -1, "n"},
    TestEntry{32768, 1, 32769, 32769, "n"},
    TestEntry{32768, 1879048192, 1879080960, 1879080960, "n"},
    TestEntry{32768, -1879048192, -1879015424, -1879015424, "n"},
    TestEntry{32768, 32767, 33023, 33023, "n"},
    TestEntry{32768, 32768, 32768, 32768, "n"},
    TestEntry{32768, 127, 32895, 32895, "n"},
    TestEntry{32768, 128, 32896, 32896, "n"},
    TestEntry{32768, 1065353216, 1065385984, 1065385984, "n"},
    TestEntry{32768, -1082130432, -1082097664, -1082097664, "n"},
    TestEntry{32768, 1073741824, 1073774592, 1073774592, "n"},
    TestEntry{32768, -268435456, -268402688, -268402688, "n"},
    TestEntry{127, -2147483648, -2147483521, -2147483521, "n"},
    TestEntry{127, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{127, 0, 127, 127, "n"},
    TestEntry{127, -1, -1, -1, "n"},
    TestEntry{127, 1, 127, 127, "n"},
    TestEntry{127, 1879048192, 1879048319, 1879048319, "n"},
    TestEntry{127, -1879048192, -1879048065, -1879048065, "n"},
    TestEntry{127, 32767, 32767, 32767, "n"},
    TestEntry{127, 32768, 32895, 32895, "n"},
    TestEntry{127, 127, 127, 127, "n"},
    TestEntry{127, 128, 128, 128, "n"},
    TestEntry{127, 1065353216, 1065353343, 1065353343, "n"},
    TestEntry{127, -1082130432, -1082130305, -1082130305, "n"},
    TestEntry{127, 1073741824, 1073741951, 1073741951, "n"},
    TestEntry{127, -268435456, -268435329, -268435329, "n"},
    TestEntry{128, -2147483648, -2147483520, -2147483520, "n"},
    TestEntry{128, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{128, 0, 128, 128, "n"},
    TestEntry{128, -1, -1, -1, "n"},
    TestEntry{128, 1, 128, 128, "n"},
    TestEntry{128, 1879048192, 1879048320, 1879048320, "n"},
    TestEntry{128, -1879048192, -1879048064, -1879048064, "n"},
    TestEntry{128, 32767, 32767, 32767, "n"},
    TestEntry{128, 32768, 32896, 32896, "n"},
    TestEntry{128, 127, 128, 128, "n"},
    TestEntry{128, 128, 128, 128, "n"},
    TestEntry{128, 1065353216, 1065353344, 1065353344, "n"},
    TestEntry{128, -1082130432, -1082130304, -1082130304, "n"},
    TestEntry{128, 1073741824, 1073741952, 1073741952, "n"},
    TestEntry{128, -268435456, -268435328, -268435328, "n"},
    TestEntry{1065353216, -2147483648, -2139095040, -2139095040, "n"},
    TestEntry{1065353216, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, -1, -1, -1, "n"},
    TestEntry{1065353216, 1, 1065353217, 1065353217, "n"},
    TestEntry{1065353216, 1879048192, 1887436800, 1887436800, "n"},
    TestEntry{1065353216, -1879048192, -1870659584, -1870659584, "n"},
    TestEntry{1065353216, 32767, 1065385983, 1065385983, "n"},
    TestEntry{1065353216, 32768, 1065385984, 1065385984, "n"},
    TestEntry{1065353216, 127, 1065353343, 1065353343, "n"},
    TestEntry{1065353216, 128, 1065353344, 1065353344, "n"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{1065353216, 1073741824, 1082130432, 1082130432, "n"},
    TestEntry{1065353216, -268435456, -260046848, -260046848, "n"},
    TestEntry{-1082130432, -2147483648, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 2147483647, -1073741825, -1073741825, "n"},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, -1, -1, "n"},
    TestEntry{-1082130432, 1, -1082130431, -1082130431, "n"},
    TestEntry{-1082130432, 1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1879048192, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32767, -1082097665, -1082097665, "n"},
    TestEntry{-1082130432, 32768, -1082097664, -1082097664, "n"},
    TestEntry{-1082130432, 127, -1082130305, -1082130305, "n"},
    TestEntry{-1082130432, 128, -1082130304, -1082130304, "n"},
    TestEntry{-1082130432, 1065353216, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -268435456, -260046848, -260046848, "n"},
    TestEntry{1073741824, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{1073741824, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, -1, -1, -1, "n"},
    TestEntry{1073741824, 1, 1073741825, 1073741825, "n"},
    TestEntry{1073741824, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{1073741824, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{1073741824, 32767, 1073774591, 1073774591, "n"},
    TestEntry{1073741824, 32768, 1073774592, 1073774592, "n"},
    TestEntry{1073741824, 127, 1073741951, 1073741951, "n"},
    TestEntry{1073741824, 128, 1073741952, 1073741952, "n"},
    TestEntry{1073741824, 1065353216, 1082130432, 1082130432, "n"},
    TestEntry{1073741824, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, -268435456, -268435456, -268435456, "n"},
    TestEntry{-268435456, -2147483648, -268435456, -268435456, "n"},
    TestEntry{-268435456, 2147483647, -251658241, -251658241, "n"},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, -1, -1, "n"},
    TestEntry{-268435456, 1, -268435455, -268435455, "n"},
    TestEntry{-268435456, 1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1879048192, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32767, -268402689, -268402689, "n"},
    TestEntry{-268435456, 32768, -268402688, -268402688, "n"},
    TestEntry{-268435456, 127, -268435329, -268435329, "n"},
    TestEntry{-268435456, 128, -268435328, -268435328, "n"},
    TestEntry{-268435456, 1065353216, -260046848, -260046848, "n"},
    TestEntry{-268435456, -1082130432, -260046848, -260046848, "n"},
    TestEntry{-268435456, 1073741824, -268435456, -268435456, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_V8MIN = {
    TestEntry{-2147483648, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 2147483647, 2130706432, 2130706432, "n"},
    TestEntry{-2147483648, 0, 0, 0, "n"},
    TestEntry{-2147483648, -1, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1, 0, 0, "n"},
    TestEntry{-2147483648, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{-2147483648, -1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32767, 0, 0, "n"},
    TestEntry{-2147483648, 32768, 0, 0, "n"},
    TestEntry{-2147483648, 127, 0, 0, "n"},
    TestEntry{-2147483648, 128, 0, 0, "n"},
    TestEntry{-2147483648, 1065353216, 1056964608, 1056964608, "n"},
    TestEntry{-2147483648, -1082130432, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{-2147483648, -268435456, -2147483648, -2147483648, "n"},
    TestEntry{2147483647, -2147483648, 2130706432, 2130706432, "n"},
    TestEntry{2147483647, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 0, 0, 0, "n"},
    TestEntry{2147483647, -1, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 1, 1, 1, "n"},
    TestEntry{2147483647, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{2147483647, -1879048192, 2130706432, 2130706432, "n"},
    TestEntry{2147483647, 32767, 32767, 32767, "n"},
    TestEntry{2147483647, 32768, 32768, 32768, "n"},
    TestEntry{2147483647, 127, 127, 127, "n"},
    TestEntry{2147483647, 128, 128, 128, "n"},
    TestEntry{2147483647, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{2147483647, -1082130432, 2139095040, 2139095040, "n"},
    TestEntry{2147483647, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{2147483647, -268435456, 2130706432, 2130706432, "n"},
    TestEntry{0, -2147483648, 0, 0, "n"},
    TestEntry{0, 2147483647, 0, 0, "n"},
    TestEntry{0, 0, 0, 0, "n"},
    TestEntry{0, -1, 0, 0, "n"},
    TestEntry{0, 1, 0, 0, "n"},
    TestEntry{0, 1879048192, 0, 0, "n"},
    TestEntry{0, -1879048192, 0, 0, "n"},
    TestEntry{0, 32767, 0, 0, "n"},
    TestEntry{0, 32768, 0, 0, "n"},
    TestEntry{0, 127, 0, 0, "n"},
    TestEntry{0, 128, 0, 0, "n"},
    TestEntry{0, 1065353216, 0, 0, "n"},
    TestEntry{0, -1082130432, 0, 0, "n"},
    TestEntry{0, 1073741824, 0, 0, "n"},
    TestEntry{0, -268435456, 0, 0, "n"},
    TestEntry{-1, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{-1, 0, 0, 0, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, 1, 1, "n"},
    TestEntry{-1, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{-1, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1, 32767, 32767, 32767, "n"},
    TestEntry{-1, 32768, 32768, 32768, "n"},
    TestEntry{-1, 127, 127, 127, "n"},
    TestEntry{-1, 128, 128, 128, "n"},
    TestEntry{-1, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{-1, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{-1, -268435456, -268435456, -268435456, "n"},
    TestEntry{1, -2147483648, 0, 0, "n"},
    TestEntry{1, 2147483647, 1, 1, "n"},
    TestEntry{1, 0, 0, 0, "n"},
    TestEntry{1, -1, 1, 1, "n"},
    TestEntry{1, 1, 1, 1, "n"},
    TestEntry{1, 1879048192, 0, 0, "n"},
    TestEntry{1, -1879048192, 0, 0, "n"},
    TestEntry{1, 32767, 1, 1, "n"},
    TestEntry{1, 32768, 0, 0, "n"},
    TestEntry{1, 127, 1, 1, "n"},
    TestEntry{1, 128, 1, 1, "n"},
    TestEntry{1, 1065353216, 0, 0, "n"},
    TestEntry{1, -1082130432, 0, 0, "n"},
    TestEntry{1, 1073741824, 0, 0, "n"},
    TestEntry{1, -268435456, 0, 0, "n"},
    TestEntry{1879048192, -2147483648, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, 2147483647, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, 0, 0, 0, "n"},
    TestEntry{1879048192, -1, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, 1, 0, 0, "n"},
    TestEntry{1879048192, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, -1879048192, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, 32767, 0, 0, "n"},
    TestEntry{1879048192, 32768, 0, 0, "n"},
    TestEntry{1879048192, 127, 0, 0, "n"},
    TestEntry{1879048192, 128, 0, 0, "n"},
    TestEntry{1879048192, 1065353216, 1056964608, 1056964608, "n"},
    TestEntry{1879048192, -1082130432, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{1879048192, -268435456, 1879048192, 1879048192, "n"},
    TestEntry{-1879048192, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1879048192, 2147483647, 2130706432, 2130706432, "n"},
    TestEntry{-1879048192, 0, 0, 0, "n"},
    TestEntry{-1879048192, -1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1, 0, 0, "n"},
    TestEntry{-1879048192, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{-1879048192, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32767, 0, 0, "n"},
    TestEntry{-1879048192, 32768, 0, 0, "n"},
    TestEntry{-1879048192, 127, 0, 0, "n"},
    TestEntry{-1879048192, 128, 0, 0, "n"},
    TestEntry{-1879048192, 1065353216, 1056964608, 1056964608, "n"},
    TestEntry{-1879048192, -1082130432, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{-1879048192, -268435456, -1879048192, -1879048192, "n"},
    TestEntry{32767, -2147483648, 0, 0, "n"},
    TestEntry{32767, 2147483647, 32767, 32767, "n"},
    TestEntry{32767, 0, 0, 0, "n"},
    TestEntry{32767, -1, 32767, 32767, "n"},
    TestEntry{32767, 1, 1, 1, "n"},
    TestEntry{32767, 1879048192, 0, 0, "n"},
    TestEntry{32767, -1879048192, 0, 0, "n"},
    TestEntry{32767, 32767, 32767, 32767, "n"},
    TestEntry{32767, 32768, 32512, 32512, "n"},
    TestEntry{32767, 127, 127, 127, "n"},
    TestEntry{32767, 128, 128, 128, "n"},
    TestEntry{32767, 1065353216, 0, 0, "n"},
    TestEntry{32767, -1082130432, 0, 0, "n"},
    TestEntry{32767, 1073741824, 0, 0, "n"},
    TestEntry{32767, -268435456, 0, 0, "n"},
    TestEntry{32768, -2147483648, 0, 0, "n"},
    TestEntry{32768, 2147483647, 32768, 32768, "n"},
    TestEntry{32768, 0, 0, 0, "n"},
    TestEntry{32768, -1, 32768, 32768, "n"},
    TestEntry{32768, 1, 0, 0, "n"},
    TestEntry{32768, 1879048192, 0, 0, "n"},
    TestEntry{32768, -1879048192, 0, 0, "n"},
    TestEntry{32768, 32767, 32512, 32512, "n"},
    TestEntry{32768, 32768, 32768, 32768, "n"},
    TestEntry{32768, 127, 0, 0, "n"},
    TestEntry{32768, 128, 0, 0, "n"},
    TestEntry{32768, 1065353216, 0, 0, "n"},
    TestEntry{32768, -1082130432, 0, 0, "n"},
    TestEntry{32768, 1073741824, 0, 0, "n"},
    TestEntry{32768, -268435456, 0, 0, "n"},
    TestEntry{127, -2147483648, 0, 0, "n"},
    TestEntry{127, 2147483647, 127, 127, "n"},
    TestEntry{127, 0, 0, 0, "n"},
    TestEntry{127, -1, 127, 127, "n"},
    TestEntry{127, 1, 1, 1, "n"},
    TestEntry{127, 1879048192, 0, 0, "n"},
    TestEntry{127, -1879048192, 0, 0, "n"},
    TestEntry{127, 32767, 127, 127, "n"},
    TestEntry{127, 32768, 0, 0, "n"},
    TestEntry{127, 127, 127, 127, "n"},
    TestEntry{127, 128, 127, 127, "n"},
    TestEntry{127, 1065353216, 0, 0, "n"},
    TestEntry{127, -1082130432, 0, 0, "n"},
    TestEntry{127, 1073741824, 0, 0, "n"},
    TestEntry{127, -268435456, 0, 0, "n"},
    TestEntry{128, -2147483648, 0, 0, "n"},
    TestEntry{128, 2147483647, 128, 128, "n"},
    TestEntry{128, 0, 0, 0, "n"},
    TestEntry{128, -1, 128, 128, "n"},
    TestEntry{128, 1, 1, 1, "n"},
    TestEntry{128, 1879048192, 0, 0, "n"},
    TestEntry{128, -1879048192, 0, 0, "n"},
    TestEntry{128, 32767, 128, 128, "n"},
    TestEntry{128, 32768, 0, 0, "n"},
    TestEntry{128, 127, 127, 127, "n"},
    TestEntry{128, 128, 128, 128, "n"},
    TestEntry{128, 1065353216, 0, 0, "n"},
    TestEntry{128, -1082130432, 0, 0, "n"},
    TestEntry{128, 1073741824, 0, 0, "n"},
    TestEntry{128, -268435456, 0, 0, "n"},
    TestEntry{1065353216, -2147483648, 1056964608, 1056964608, "n"},
    TestEntry{1065353216, 2147483647, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, 0, 0, 0, "n"},
    TestEntry{1065353216, -1, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, 1, 0, 0, "n"},
    TestEntry{1065353216, 1879048192, 1056964608, 1056964608, "n"},
    TestEntry{1065353216, -1879048192, 1056964608, 1056964608, "n"},
    TestEntry{1065353216, 32767, 0, 0, "n"},
    TestEntry{1065353216, 32768, 0, 0, "n"},
    TestEntry{1065353216, 127, 0, 0, "n"},
    TestEntry{1065353216, 128, 0, 0, "n"},
    TestEntry{1065353216, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, -1082130432, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, 1073741824, 1056964608, 1056964608, "n"},
    TestEntry{1065353216, -268435456, 1056964608, 1056964608, "n"},
    TestEntry{-1082130432, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1082130432, 2147483647, 2139095040, 2139095040, "n"},
    TestEntry{-1082130432, 0, 0, 0, "n"},
    TestEntry{-1082130432, -1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1, 0, 0, "n"},
    TestEntry{-1082130432, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{-1082130432, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1082130432, 32767, 0, 0, "n"},
    TestEntry{-1082130432, 32768, 0, 0, "n"},
    TestEntry{-1082130432, 127, 0, 0, "n"},
    TestEntry{-1082130432, 128, 0, 0, "n"},
    TestEntry{-1082130432, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{-1082130432, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{-1082130432, -268435456, -1090519040, -1090519040, "n"},
    TestEntry{1073741824, -2147483648, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, 2147483647, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, 0, 0, 0, "n"},
    TestEntry{1073741824, -1, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, 1, 0, 0, "n"},
    TestEntry{1073741824, 1879048192, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, -1879048192, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, 32767, 0, 0, "n"},
    TestEntry{1073741824, 32768, 0, 0, "n"},
    TestEntry{1073741824, 127, 0, 0, "n"},
    TestEntry{1073741824, 128, 0, 0, "n"},
    TestEntry{1073741824, 1065353216, 1056964608, 1056964608, "n"},
    TestEntry{1073741824, -1082130432, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, -268435456, 1073741824, 1073741824, "n"},
    TestEntry{-268435456, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-268435456, 2147483647, 2130706432, 2130706432, "n"},
    TestEntry{-268435456, 0, 0, 0, "n"},
    TestEntry{-268435456, -1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1, 0, 0, "n"},
    TestEntry{-268435456, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{-268435456, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-268435456, 32767, 0, 0, "n"},
    TestEntry{-268435456, 32768, 0, 0, "n"},
    TestEntry{-268435456, 127, 0, 0, "n"},
    TestEntry{-268435456, 128, 0, 0, "n"},
    TestEntry{-268435456, 1065353216, 1056964608, 1056964608, "n"},
    TestEntry{-268435456, -1082130432, -1090519040, -1090519040, "n"},
    TestEntry{-268435456, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{-268435456, -268435456, -268435456, -268435456, "n"},
};

static const std::vector<TestEntry> TEST_OP_V8MULD = {
    TestEntry{-2147483648, -2147483648, 1073741824, 1073741824, "n"},
    TestEntry{-2147483648, 2147483647, 1073741824, 1073741824, "n"},
    TestEntry{-2147483648, 0, 0, 0, "n"},
    TestEntry{-2147483648, -1, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1, 0, 0, "n"},
    TestEntry{-2147483648, 1879048192, 939524096, 939524096, "n"},
    TestEntry{-2147483648, -1879048192, 1207959552, 1207959552, "n"},
    TestEntry{-2147483648, 32767, 0, 0, "n"},
    TestEntry{-2147483648, 32768, 0, 0, "n"},
    TestEntry{-2147483648, 127, 0, 0, "n"},
    TestEntry{-2147483648, 128, 0, 0, "n"},
    TestEntry{-2147483648, 1065353216, 536870912, 536870912, "n"},
    TestEntry{-2147483648, -1082130432, 1610612736, 1610612736, "n"},
    TestEntry{-2147483648, 1073741824, 536870912, 536870912, "n"},
    TestEntry{-2147483648, -268435456, 2013265920, 2013265920, "n"},
    TestEntry{2147483647, -2147483648, 1073741824, 1073741824, "n"},
    TestEntry{2147483647, 2147483647, 1073741823, 1073741823, "n"},
    TestEntry{2147483647, 0, 0, 0, "n"},
    TestEntry{2147483647, -1, 2147483647, 2147483647, "n"},
    TestEntry{2147483647, 1, 1, 1, "n"},
    TestEntry{2147483647, 1879048192, 939524096, 939524096, "n"},
    TestEntry{2147483647, -1879048192, 1207959552, 1207959552, "n"},
    TestEntry{2147483647, 32767, 32767, 32767, "n"},
    TestEntry{2147483647, 32768, 32768, 32768, "n"},
    TestEntry{2147483647, 127, 127, 127, "n"},
    TestEntry{2147483647, 128, 128, 128, "n"},
    TestEntry{2147483647, 1065353216, 528482304, 528482304, "n"},
    TestEntry{2147483647, -1082130432, 1602224128, 1602224128, "n"},
    TestEntry{2147483647, 1073741824, 536870912, 536870912, "n"},
    TestEntry{2147483647, -268435456, 2013265920, 2013265920, "n"},
    TestEntry{0, -2147483648, 0, 0, "n"},
    TestEntry{0, 2147483647, 0, 0, "n"},
    TestEntry{0, 0, 0, 0, "n"},
    TestEntry{0, -1, 0, 0, "n"},
    TestEntry{0, 1, 0, 0, "n"},
    TestEntry{0, 1879048192, 0, 0, "n"},
    TestEntry{0, -1879048192, 0, 0, "n"},
    TestEntry{0, 32767, 0, 0, "n"},
    TestEntry{0, 32768, 0, 0, "n"},
    TestEntry{0, 127, 0, 0, "n"},
    TestEntry{0, 128, 0, 0, "n"},
    TestEntry{0, 1065353216, 0, 0, "n"},
    TestEntry{0, -1082130432, 0, 0, "n"},
    TestEntry{0, 1073741824, 0, 0, "n"},
    TestEntry{0, -268435456, 0, 0, "n"},
    TestEntry{-1, -2147483648, -2147483648, -2147483648, "n"},
    TestEntry{-1, 2147483647, 2147483647, 2147483647, "n"},
    TestEntry{-1, 0, 0, 0, "n"},
    TestEntry{-1, -1, -1, -1, "n"},
    TestEntry{-1, 1, 1, 1, "n"},
    TestEntry{-1, 1879048192, 1879048192, 1879048192, "n"},
    TestEntry{-1, -1879048192, -1879048192, -1879048192, "n"},
    TestEntry{-1, 32767, 32767, 32767, "n"},
    TestEntry{-1, 32768, 32768, 32768, "n"},
    TestEntry{-1, 127, 127, 127, "n"},
    TestEntry{-1, 128, 128, 128, "n"},
    TestEntry{-1, 1065353216, 1065353216, 1065353216, "n"},
    TestEntry{-1, -1082130432, -1082130432, -1082130432, "n"},
    TestEntry{-1, 1073741824, 1073741824, 1073741824, "n"},
    TestEntry{-1, -268435456, -268435456, -268435456, "n"},
    TestEntry{1, -2147483648, 0, 0, "n"},
    TestEntry{1, 2147483647, 1, 1, "n"},
    TestEntry{1, 0, 0, 0, "n"},
    TestEntry{1, -1, 1, 1, "n"},
    TestEntry{1, 1, 0, 0, "n"},
    TestEntry{1, 1879048192, 0, 0, "n"},
    TestEntry{1, -1879048192, 0, 0, "n"},
    TestEntry{1, 32767, 1, 1, "n"},
    TestEntry{1, 32768, 0, 0, "n"},
    TestEntry{1, 127, 0, 0, "n"},
    TestEntry{1, 128, 1, 1, "n"},
    TestEntry{1, 1065353216, 0, 0, "n"},
    TestEntry{1, -1082130432, 0, 0, "n"},
    TestEntry{1, 1073741824, 0, 0, "n"},
    TestEntry{1, -268435456, 0, 0, "n"},
    TestEntry{1879048192, -2147483648, 939524096, 939524096, "n"},
    TestEntry{1879048192, 2147483647, 939524096, 939524096, "n"},
    TestEntry{1879048192, 0, 0, 0, "n"},
    TestEntry{1879048192, -1, 1879048192, 1879048192, "n"},
    TestEntry{1879048192, 1, 0, 0, "n"},
    TestEntry{1879048192, 1879048192, 822083584, 822083584, "n"},
    TestEntry{1879048192, -1879048192, 1056964608, 1056964608, "n"},
    TestEntry{1879048192, 32767, 0, 0, "n"},
    TestEntry{1879048192, 32768, 0, 0, "n"},
    TestEntry{1879048192, 127, 0, 0, "n"},
    TestEntry{1879048192, 128, 0, 0, "n"},
    TestEntry{1879048192, 1065353216, 469762048, 469762048, "n"},
    TestEntry{1879048192, -1082130432, 1409286144, 1409286144, "n"},
    TestEntry{1879048192, 1073741824, 469762048, 469762048, "n"},
    TestEntry{1879048192, -268435456, 1761607680, 1761607680, "n"},
    TestEntry{-1879048192, -2147483648, 1207959552, 1207959552, "n"},
    TestEntry{-1879048192, 2147483647, 1207959552, 1207959552, "n"},
    TestEntry{-1879048192, 0, 0, 0, "n"},
    TestEntry{-1879048192, -1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1, 0, 0, "n"},
    TestEntry{-1879048192, 1879048192, 1056964608, 1056964608, "n"},
    TestEntry{-1879048192, -1879048192, 1358954496, 1358954496, "n"},
    TestEntry{-1879048192, 32767, 0, 0, "n"},
    TestEntry{-1879048192, 32768, 0, 0, "n"},
    TestEntry{-1879048192, 127, 0, 0, "n"},
    TestEntry{-1879048192, 128, 0, 0, "n"},
    TestEntry{-1879048192, 1065353216, 603979776, 603979776, "n"},
    TestEntry{-1879048192, -1082130432, 1811939328, 1811939328, "n"},
    TestEntry{-1879048192, 1073741824, 603979776, 603979776, "n"},
    TestEntry{-1879048192, -268435456, -2013265920, -2013265920, "n"},
    TestEntry{32767, -2147483648, 0, 0, "n"},
    TestEntry{32767, 2147483647, 32767, 32767, "n"},
    TestEntry{32767, 0, 0, 0, "n"},
    TestEntry{32767, -1, 32767, 32767, "n"},
    TestEntry{32767, 1, 1, 1, "n"},
    TestEntry{32767, 1879048192, 0, 0, "n"},
    TestEntry{32767, -1879048192, 0, 0, "n"},
    TestEntry{32767, 32767, 16383, 16383, "n"},
    TestEntry{32767, 32768, 16384, 16384, "n"},
    TestEntry{32767, 127, 127, 127, "n"},
    TestEntry{32767, 128, 128, 128, "n"},
    TestEntry{32767, 1065353216, 0, 0, "n"},
    TestEntry{32767, -1082130432, 0, 0, "n"},
    TestEntry{32767, 1073741824, 0, 0, "n"},
    TestEntry{32767, -268435456, 0, 0, "n"},
    TestEntry{32768, -2147483648, 0, 0, "n"},
    TestEntry{32768, 2147483647, 32768, 32768, "n"},
    TestEntry{32768, 0, 0, 0, "n"},
    TestEntry{32768, -1, 32768, 32768, "n"},
    TestEntry{32768, 1, 0, 0, "n"},
    TestEntry{32768, 1879048192, 0, 0, "n"},
    TestEntry{32768, -1879048192, 0, 0, "n"},
    TestEntry{32768, 32767, 16384, 16384, "n"},
    TestEntry{32768, 32768, 16384, 16384, "n"},
    TestEntry{32768, 127, 0, 0, "n"},
    TestEntry{32768, 128, 0, 0, "n"},
    TestEntry{32768, 1065353216, 0, 0, "n"},
    TestEntry{32768, -1082130432, 0, 0, "n"},
    TestEntry{32768, 1073741824, 0, 0, "n"},
    TestEntry{32768, -268435456, 0, 0, "n"},
    TestEntry{127, -2147483648, 0, 0, "n"},
    TestEntry{127, 2147483647, 127, 127, "n"},
    TestEntry{127, 0, 0, 0, "n"},
    TestEntry{127, -1, 127, 127, "n"},
    TestEntry{127, 1, 0, 0, "n"},
    TestEntry{127, 1879048192, 0, 0, "n"},
    TestEntry{127, -1879048192, 0, 0, "n"},
    TestEntry{127, 32767, 127, 127, "n"},
    TestEntry{127, 32768, 0, 0, "n"},
    TestEntry{127, 127, 63, 63, "n"},
    TestEntry{127, 128, 64, 64, "n"},
    TestEntry{127, 1065353216, 0, 0, "n"},
    TestEntry{127, -1082130432, 0, 0, "n"},
    TestEntry{127, 1073741824, 0, 0, "n"},
    TestEntry{127, -268435456, 0, 0, "n"},
    TestEntry{128, -2147483648, 0, 0, "n"},
    TestEntry{128, 2147483647, 128, 128, "n"},
    TestEntry{128, 0, 0, 0, "n"},
    TestEntry{128, -1, 128, 128, "n"},
    TestEntry{128, 1, 1, 1, "n"},
    TestEntry{128, 1879048192, 0, 0, "n"},
    TestEntry{128, -1879048192, 0, 0, "n"},
    TestEntry{128, 32767, 128, 128, "n"},
    TestEntry{128, 32768, 0, 0, "n"},
    TestEntry{128, 127, 64, 64, "n"},
    TestEntry{128, 128, 64, 64, "n"},
    TestEntry{128, 1065353216, 0, 0, "n"},
    TestEntry{128, -1082130432, 0, 0, "n"},
    TestEntry{128, 1073741824, 0, 0, "n"},
    TestEntry{128, -268435456, 0, 0, "n"},
    TestEntry{1065353216, -2147483648, 536870912, 536870912, "n"},
    TestEntry{1065353216, 2147483647, 528482304, 528482304, "n"},
    TestEntry{1065353216, 0, 0, 0, "n"},
    TestEntry{1065353216, -1, 1065353216, 1065353216, "n"},
    TestEntry{1065353216, 1, 0, 0, "n"},
    TestEntry{1065353216, 1879048192, 469762048, 469762048, "n"},
    TestEntry{1065353216, -1879048192, 603979776, 603979776, "n"},
    TestEntry{1065353216, 32767, 0, 0, "n"},
    TestEntry{1065353216, 32768, 0, 0, "n"},
    TestEntry{1065353216, 127, 0, 0, "n"},
    TestEntry{1065353216, 128, 0, 0, "n"},
    TestEntry{1065353216, 1065353216, 272629760, 272629760, "n"},
    TestEntry{1065353216, -1082130432, 792723456, 792723456, "n"},
    TestEntry{1065353216, 1073741824, 268435456, 268435456, "n"},
    TestEntry{1065353216, -268435456, 989855744, 989855744, "n"},
    TestEntry{-1082130432, -2147483648, 1610612736, 1610612736, "n"},
    TestEntry{-1082130432, 2147483647, 1602224128, 1602224128, "n"},
    TestEntry{-1082130432, 0, 0, 0, "n"},
    TestEntry{-1082130432, -1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1, 0, 0, "n"},
    TestEntry{-1082130432, 1879048192, 1409286144, 1409286144, "n"},
    TestEntry{-1082130432, -1879048192, 1811939328, 1811939328, "n"},
    TestEntry{-1082130432, 32767, 0, 0, "n"},
    TestEntry{-1082130432, 32768, 0, 0, "n"},
    TestEntry{-1082130432, 127, 0, 0, "n"},
    TestEntry{-1082130432, 128, 0, 0, "n"},
    TestEntry{-1082130432, 1065353216, 792723456, 792723456, "n"},
    TestEntry{-1082130432, -1082130432, -1891631104, -1891631104, "n"},
    TestEntry{-1082130432, 1073741824, 805306368, 805306368, "n"},
    TestEntry{-1082130432, -268435456, -1275068416, -1275068416, "n"},
    TestEntry{1073741824, -2147483648, 536870912, 536870912, "n"},
    TestEntry{1073741824, 2147483647, 536870912, 536870912, "n"},
    TestEntry{1073741824, 0, 0, 0, "n"},
    TestEntry{1073741824, -1, 1073741824, 1073741824, "n"},
    TestEntry{1073741824, 1, 0, 0, "n"},
    TestEntry{1073741824, 1879048192, 469762048, 469762048, "n"},
    TestEntry{1073741824, -1879048192, 603979776, 603979776, "n"},
    TestEntry{1073741824, 32767, 0, 0, "n"},
    TestEntry{1073741824, 32768, 0, 0, "n"},
    TestEntry{1073741824, 127, 0, 0, "n"},
    TestEntry{1073741824, 128, 0, 0, "n"},
    TestEntry{1073741824, 1065353216, 268435456, 268435456, "n"},
    TestEntry{1073741824, -1082130432, 805306368, 805306368, "n"},
    TestEntry{1073741824, 1073741824, 268435456, 268435456, "n"},
    TestEntry{1073741824, -268435456, 1006632960, 1006632960, "n"},
    TestEntry{-268435456, -2147483648, 2013265920, 2013265920, "n"},
    TestEntry{-268435456, 2147483647, 2013265920, 2013265920, "n"},
    TestEntry{-268435456, 0, 0, 0, "n"},
    TestEntry{-268435456, -1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1, 0, 0, "n"},
    TestEntry{-268435456, 1879048192, 1761607680, 1761607680, "n"},
    TestEntry{-268435456, -1879048192, -2013265920, -2013265920, "n"},
    TestEntry{-268435456, 32767, 0, 0, "n"},
    TestEntry{-268435456, 32768, 0, 0, "n"},
    TestEntry{-268435456, 127, 0, 0, "n"},
    TestEntry{-268435456, 128, 0, 0, "n"},
    TestEntry{-268435456, 1065353216, 989855744, 989855744, "n"},
    TestEntry{-268435456, -1082130432, -1275068416, -1275068416, "n"},
    TestEntry{-268435456, 1073741824, 1006632960, 1006632960, "n"},
    TestEntry{-268435456, -268435456, -503316480, -503316480, "n"},
};

static const std::vector<TestEntry> TEST_OP_V8SUBS = {
    TestEntry{-2147483648, -2147483648, 0, 0, "z"},
    TestEntry{-2147483648, 2147483647, 16777216, 16777216, ""},
    TestEntry{-2147483648, 0, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, -1, 0, 0, "z"},
    TestEntry{-2147483648, 1, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1879048192, 268435456, 268435456, ""},
    TestEntry{-2147483648, -1879048192, 0, 0, "z"},
    TestEntry{-2147483648, 32767, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 32768, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 127, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 128, -2147483648, -2147483648, "n"},
    TestEntry{-2147483648, 1065353216, 1090519040, 1090519040, ""},
    TestEntry{-2147483648, -1082130432, 0, 0, "z"},
    TestEntry{-2147483648, 1073741824, 1073741824, 1073741824, ""},
    TestEntry{-2147483648, -268435456, 0, 0, "z"},
    TestEntry{2147483647, -2147483648, 16777215, 16777215, ""},
    TestEntry{2147483647, 2147483647, 0, 0, "z"},
    TestEntry{2147483647, 0, 2147483647, 2147483647, ""},
    TestEntry{2147483647, -1, 0, 0, "z"},
    TestEntry{2147483647, 1, 2147483646, 2147483646, ""},
    TestEntry{2147483647, 1879048192, 268435455, 268435455, ""},
    TestEntry{2147483647, -1879048192, 16777215, 16777215, ""},
    TestEntry{2147483647, 32767, 2147450880, 2147450880, ""},
    TestEntry{2147483647, 32768, 2147450879, 2147450879, ""},
    TestEntry{2147483647, 127, 2147483520, 2147483520, ""},
    TestEntry{2147483647, 128, 2147483519, 2147483519, ""},
    TestEntry{2147483647, 1065353216, 1082130431, 1082130431, ""},
    TestEntry{2147483647, -1082130432, 8388607, 8388607, ""},
    TestEntry{2147483647, 1073741824, 1073741823, 1073741823, ""},
    TestEntry{2147483647, -268435456, 16777215, 16777215, ""},
    TestEntry{0, -2147483648, 0, 0, "z"},
    TestEntry{0, 2147483647, 0, 0, "z"},
    TestEntry{0, 0, 0, 0, "z"},
    TestEntry{0, -1, 0, 0, "z"},
    TestEntry{0, 1, 0, 0, "z"},
    TestEntry{0, 1879048192, 0, 0, "z"},
    TestEntry{0, -1879048192, 0, 0, "z"},
    TestEntry{0, 32767, 0, 0, "z"},
    TestEntry{0, 32768, 0, 0, "z"},
    TestEntry{0, 127, 0, 0, "z"},
    TestEntry{0, 128, 0, 0, "z"},
    TestEntry{0, 1065353216, 0, 0, "z"},
    TestEntry{0, -1082130432, 0, 0, "z"},
    TestEntry{0, 1073741824, 0, 0, "z"},
    TestEntry{0, -268435456, 0, 0, "z"},
    TestEntry{-1, -2147483648, 2147483647, 2147483647, ""},
    TestEntry{-1, 2147483647, -2147483648, -2147483648, "n"},
    TestEntry{-1, 0, -1, -1, "n"},
    TestEntry{-1, -1, 0, 0, "z"},
    TestEntry{-1, 1, -2, -2, "n"},
    TestEntry{-1, 1879048192, -1879048193, -1879048193, "n"},
    TestEntry{-1, -1879048192, 1879048191, 1879048191, ""},
    TestEntry{-1, 32767, -32768, -32768, "n"},
    TestEntry{-1, 32768, -32769, -32769, "n"},
    TestEntry{-1, 127, -128, -128, "n"},
    TestEntry{-1, 128, -129, -129, "n"},
    TestEntry{-1, 1065353216, -1065353217, -1065353217, "n"},
    TestEntry{-1, -1082130432, 1082130431, 1082130431, ""},
    TestEntry{-1, 1073741824, -1073741825, -1073741825, "n"},
    TestEntry{-1, -268435456, 268435455, 268435455, ""},
    TestEntry{1, -2147483648, 1, 1, ""},
    TestEntry{1, 2147483647, 0, 0, "z"},
    TestEntry{1, 0, 1, 1, ""},
    TestEntry{1, -1, 0, 0, "z"},
    TestEntry{1, 1, 0, 0, "z"},
    TestEntry{1, 1879048192, 1, 1, ""},
    TestEntry{1, -1879048192, 1, 1, ""},
    TestEntry{1, 32767, 0, 0, "z"},
    TestEntry{1, 32768, 1, 1, ""},
    TestEntry{1, 127, 0, 0, "z"},
    TestEntry{1, 128, 0, 0, "z"},
    TestEntry{1, 1065353216, 1, 1, ""},
    TestEntry{1, -1082130432, 1, 1, ""},
    TestEntry{1, 1073741824, 1, 1, ""},
    TestEntry{1, -268435456, 1, 1, ""},
    TestEntry{1879048192, -2147483648, 0, 0, "z"},
    TestEntry{1879048192, 2147483647, 0, 0, "z"},
    TestEntry{1879048192, 0, 1879048192, 1879048192, ""},
    TestEntry{1879048192, -1, 0, 0, "z"},
    TestEntry{1879048192, 1, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1879048192, 0, 0, "z"},
    TestEntry{1879048192, -1879048192, 0, 0, "z"},
    TestEntry{1879048192, 32767, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 32768, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 127, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 128, 1879048192, 1879048192, ""},
    TestEntry{1879048192, 1065353216, 822083584, 822083584, ""},
    TestEntry{1879048192, -1082130432, 0, 0, "z"},
    TestEntry{1879048192, 1073741824, 805306368, 805306368, ""},
    TestEntry{1879048192, -268435456, 0, 0, "z"},
    TestEntry{-1879048192, -2147483648, 268435456, 268435456, ""},
    TestEntry{-1879048192, 2147483647, 285212672, 285212672, ""},
    TestEntry{-1879048192, 0, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, -1, 0, 0, "z"},
    TestEntry{-1879048192, 1, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1879048192, 536870912, 536870912, ""},
    TestEntry{-1879048192, -1879048192, 0, 0, "z"},
    TestEntry{-1879048192, 32767, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 32768, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 127, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 128, -1879048192, -1879048192, "n"},
    TestEntry{-1879048192, 1065353216, 1358954496, 1358954496, ""},
    TestEntry{-1879048192, -1082130432, 0, 0, "z"},
    TestEntry{-1879048192, 1073741824, 1342177280, 1342177280, ""},
    TestEntry{-1879048192, -268435456, 0, 0, "z"},
    TestEntry{32767, -2147483648, 32767, 32767, ""},
    TestEntry{32767, 2147483647, 0, 0, "z"},
    TestEntry{32767, 0, 32767, 32767, ""},
    TestEntry{32767, -1, 0, 0, "z"},
    TestEntry{32767, 1, 32766, 32766, ""},
    TestEntry{32767, 1879048192, 32767, 32767, ""},
    TestEntry{32767, -1879048192, 32767, 32767, ""},
    TestEntry{32767, 32767, 0, 0, "z"},
    TestEntry{32767, 32768, 255, 255, ""},
    TestEntry{32767, 127, 32640, 32640, ""},
    TestEntry{32767, 128, 32639, 32639, ""},
    TestEntry{32767, 1065353216, 32767, 32767, ""},
    TestEntry{32767, -1082130432, 32767, 32767, ""},
    TestEntry{32767, 1073741824, 32767, 32767, ""},
    TestEntry{32767, -268435456, 32767, 32767, ""},
    TestEntry{32768, -2147483648, 32768, 32768, ""},
    TestEntry{32768, 2147483647, 0, 0, "z"},
    TestEntry{32768, 0, 32768, 32768, ""},
    TestEntry{32768, -1, 0, 0, "z"},
    TestEntry{32768, 1, 32768, 32768, ""},
    TestEntry{32768, 1879048192, 32768, 32768, ""},
    TestEntry{32768, -1879048192, 32768, 32768, ""},
    TestEntry{32768, 32767, 256, 256, ""},
    TestEntry{32768, 32768, 0, 0, "z"},
    TestEntry{32768, 127, 32768, 32768, ""},
    TestEntry{32768, 128, 32768, 32768, ""},
    TestEntry{32768, 1065353216, 32768, 32768, ""},
    TestEntry{32768, -1082130432, 32768, 32768, ""},
    TestEntry{32768, 1073741824, 32768, 32768, ""},
    TestEntry{32768, -268435456, 32768, 32768, ""},
    TestEntry{127, -2147483648, 127, 127, ""},
    TestEntry{127, 2147483647, 0, 0, "z"},
    TestEntry{127, 0, 127, 127, ""},
    TestEntry{127, -1, 0, 0, "z"},
    TestEntry{127, 1, 126, 126, ""},
    TestEntry{127, 1879048192, 127, 127, ""},
    TestEntry{127, -1879048192, 127, 127, ""},
    TestEntry{127, 32767, 0, 0, "z"},
    TestEntry{127, 32768, 127, 127, ""},
    TestEntry{127, 127, 0, 0, "z"},
    TestEntry{127, 128, 0, 0, "z"},
    TestEntry{127, 1065353216, 127, 127, ""},
    TestEntry{127, -1082130432, 127, 127, ""},
    TestEntry{127, 1073741824, 127, 127, ""},
    TestEntry{127, -268435456, 127, 127, ""},
    TestEntry{128, -2147483648, 128, 128, ""},
    TestEntry{128, 2147483647, 0, 0, "z"},
    TestEntry{128, 0, 128, 128, ""},
    TestEntry{128, -1, 0, 0, "z"},
    TestEntry{128, 1, 127, 127, ""},
    TestEntry{128, 1879048192, 128, 128, ""},
    TestEntry{128, -1879048192, 128, 128, ""},
    TestEntry{128, 32767, 0, 0, "z"},
    TestEntry{128, 32768, 128, 128, ""},
    TestEntry{128, 127, 1, 1, ""},
    TestEntry{128, 128, 0, 0, "z"},
    TestEntry{128, 1065353216, 128, 128, ""},
    TestEntry{128, -1082130432, 128, 128, ""},
    TestEntry{128, 1073741824, 128, 128, ""},
    TestEntry{128, -268435456, 128, 128, ""},
    TestEntry{1065353216, -2147483648, 8388608, 8388608, ""},
    TestEntry{1065353216, 2147483647, 0, 0, "z"},
    TestEntry{1065353216, 0, 1065353216, 1065353216, ""},
    TestEntry{1065353216, -1, 0, 0, "z"},
    TestEntry{1065353216, 1, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1879048192, 8388608, 8388608, ""},
    TestEntry{1065353216, -1879048192, 8388608, 8388608, ""},
    TestEntry{1065353216, 32767, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 32768, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 127, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 128, 1065353216, 1065353216, ""},
    TestEntry{1065353216, 1065353216, 0, 0, "z"},
    TestEntry{1065353216, -1082130432, 0, 0, "z"},
    TestEntry{1065353216, 1073741824, 8388608, 8388608, ""},
    TestEntry{1065353216, -268435456, 8388608, 8388608, ""},
    TestEntry{-1082130432, -2147483648, 1065353216, 1065353216, ""},
    TestEntry{-1082130432, 2147483647, 1073741824, 1073741824, ""},
    TestEntry{-1082130432, 0, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, -1, 0, 0, "z"},
    TestEntry{-1082130432, 1, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1879048192, 1333788672, 1333788672, ""},
    TestEntry{-1082130432, -1879048192, 796917760, 796917760, ""},
    TestEntry{-1082130432, 32767, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 32768, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 127, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 128, -1082130432, -1082130432, "n"},
    TestEntry{-1082130432, 1065353216, -2147483648, -2147483648, "n"},
    TestEntry{-1082130432, -1082130432, 0, 0, "z"},
    TestEntry{-1082130432, 1073741824, 2139095040, 2139095040, ""},
    TestEntry{-1082130432, -268435456, 8388608, 8388608, ""},
    TestEntry{1073741824, -2147483648, 0, 0, "z"},
    TestEntry{1073741824, 2147483647, 0, 0, "z"},
    TestEntry{1073741824, 0, 1073741824, 1073741824, ""},
    TestEntry{1073741824, -1, 0, 0, "z"},
    TestEntry{1073741824, 1, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1879048192, 0, 0, "z"},
    TestEntry{1073741824, -1879048192, 0, 0, "z"},
    TestEntry{1073741824, 32767, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 32768, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 127, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 128, 1073741824, 1073741824, ""},
    TestEntry{1073741824, 1065353216, 16777216, 16777216, ""},
    TestEntry{1073741824, -1082130432, 0, 0, "z"},
    TestEntry{1073741824, 1073741824, 0, 0, "z"},
    TestEntry{1073741824, -268435456, 0, 0, "z"},
    TestEntry{-268435456, -2147483648, 1879048192, 1879048192, ""},
    TestEntry{-268435456, 2147483647, 1895825408, 1895825408, ""},
    TestEntry{-268435456, 0, -268435456, -268435456, "n"},
    TestEntry{-268435456, -1, 0, 0, "z"},
    TestEntry{-268435456, 1, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1879048192, -2147483648, -2147483648, "n"},
    TestEntry{-268435456, -1879048192, 1610612736, 1610612736, ""},
    TestEntry{-268435456, 32767, -268435456, -268435456, "n"},
    TestEntry{-268435456, 32768, -268435456, -268435456, "n"},
    TestEntry{-268435456, 127, -268435456, -268435456, "n"},
    TestEntry{-268435456, 128, -268435456, -268435456, "n"},
    TestEntry{-268435456, 1065353216, -1325400064, -1325400064, "n"},
    TestEntry{-268435456, -1082130432, 822083584, 822083584, ""},
    TestEntry{-268435456, 1073741824, -1342177280, -1342177280, "n"},
    TestEntry{-268435456, -268435456, 0, 0, "z"},
};

